CharMatcherGuava 为我们提供了字符匹配器,你可以认为一个CharMatcher实例代表着某一类字符,如数字或空白字符 。CharMatcher 还提供了一系列方法,让你对字符进行特定类型的操作:修剪 [trim]、折叠 [collapse]、移除 [remove]、保留 [retain] 等等 。
所以使用 CharMatcher,大致分两步
- 第一步:定义 CharMatcher,定义怎样算“匹配” 到字符
- 第二步:如何处理匹配到的这些字符
将 " 1 2 3 4 6 9 " 转换成 "1 2 3 4 6 9" 去掉多余的空格,用空格间隔每个字符
// 我们先定义“空白” 然后折叠连续的空白并用一个空格代替,同时修剪掉首尾的空格String tmpStr = "123 4 69" ;String result = CharMatcher.whitespace().trimAndCollapseFrom(tmpStr,' ');System.out.println(result);
获取 0-6 范围内的数字字符String tmpStr = "df67sn18kj9" ;String result = CharMatcher.inRange('0','6').retainFrom(tmpStr) ;System.out.println( result);
获取 d-k 范围内的数字字符String tmpStr = "df67sn18kj9" ;String result = CharMatcher.inRange('d','k').retainFrom(tmpStr) ;System.out.println( result);
去掉特殊字符String input = "H*el.lo,}12";CharMatcher matcher = CharMatcher.javaLetterOrDigit();String result = matcher.retainFrom(input);assertEquals("Hello12", result);
去掉非 ASCII 码字符String input = "あ hello?";String result = CharMatcher.ascii().retainFrom(input);assertEquals("hello", result);result = CharMatcher.inRange('0', 'z').retainFrom(input);assertEquals("hello", result);
过滤或筛选字符串中的汉字//单字节匹配器(汉字是双字节) 不要汉字System.out.println("去除双字节,获取单字节:" + CharMatcher.singleWidth().retainFrom(matchStr));//只留汉字System.out.println("去除单字节,获取双字节:" + CharMatcher.singleWidth().removeFrom(matchStr));
方法分类看完上面的例子,你可能对 CharMatcher 的方法感兴趣了,CharMatcher 一类分三类第一类是判定型函数,判断 Charmacher 和入参字符串的匹配关系 。
CharMatcher.is('a').matchesAllOf("aaa");//trueCharMatcher.is('a').matchesAnyOf("aba");//trueCharMatcher.is('a').matchesNoneOf("aba");//true
第二类是计数型函数,查找入参字符串中第一次、最后一次出现目标字符的位置,或者目标字符出现的次数,比如 indexIn,lastIndexIn 和 countIn 。CharMatcher.is('a').countIn("aaa"); // 3CharMatcher.is('a').indexIn("java"); // 1
第三类就是对匹配字符的操作 。包括 removeFrom、retainFrom、replaceFrom、trimFrom、collapseFrom 等 。方法清单拉个单子方便查
文章插图
CaseFormatCaseFormat 被用来方便地在各种 ASCII 大小写规范间转换字符串——比如,编程语言的命名规范 。CaseFormat 支持的格式如下:
格式 范例 LOWER_CAMEL lowerCamel LOWER_HYPHEN lower-hyphen LOWER_UNDERSCORE lower_underscore UPPER_CAMEL UpperCamel UPPER_UNDERSCORE UPPER_UNDERSCORE
CaseFormat 的用法很直接:
CaseFormat.UPPER_UNDERSCORE.to(CaseFormat.LOWER_CAMEL, "CONSTANT_NAME")); // returns "constantName"
CaseFormat 在某些时候尤其有用,比如编写代码生成器的时候 。StringsStrings 工具类也提供了许多好用的处理字符串的方法,比如简单和见名知义就不多说了 。
参考
- https://www.runoob.com/w3cnote/java-stringtokenizer-intro.html
- https://www.baeldung.com/guava-string-charmatcher
- https://github.com/google/guava/wiki/StringsExplained#splitter
- https://mindawei.github.io/2018/03/17/Guava 学习之 CharMatcher/
推荐阅读
- 一文学会AOP动态切面开发
- 大神都在用的Word文档技巧,你们快来学!
- 茶碱过敏症状
- 夏季如何预防湿疹,学会四个好方法
- 求职|90后大学毕业生找工作被拒,知道被拒绝原因后,网友:长见识了
- 大学|毕业10年不找工作,33岁还在家啃老,却理直气壮:这全怪我爸妈
- 学做曲奇饼干
- 教师|中学招聘教师要求学历清北本科,看到学校名字后,网友:明白了
- 大学生|面试时被问及过往薪资,如实回答可能要吃亏,聪明人这样说
- 杭州|初中一语文老师的辞职信走红,教学19年工资2000多,校长无言以对