跟着 Guava 学 Java 之字符串处理( 二 )

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 等 。
方法清单拉个单子方便查
 
跟着 Guava 学 Java 之字符串处理

文章插图
 
 
 
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/




推荐阅读