Guava String工具类

Joiner(连接器)

Joiner是用来连接字符串的,与StringUtils.join功能类似,但是StringUtils.join只能按给定值进行连接,Joiner可以进行扩展,跳过空值、替换等功能。

基本方法

//创建Joiner对象,以参数表示用什么连接
Joiner on(String separator);
//替换null值
Joiner useForNull(final String nullText);
//跳过null值
Joiner skipNulls();
//指定序列Map的分隔符
Joiner.MapJoiner withKeyValueSeparator(String keyValueSeparator);
//需要转换的参数,最终调用toString方法进行拼接
String join(Iterable<?> parts);
String join(Object[]args);

跳过null值

Joiner joiner = Joiner.on("; ").skipNulls();
return joiner.join("Harry", null, "Ron", "Hermione");
//return "Harry; Ron; Hermione"

替换null值

Joiner joiner = Joiner.on("; ").useForNull("空值);
return joiner.join("Harry", null, "Ron", "Hermione");
//return "Harry;空值; Ron; Hermione"

Join Map

Joiner.MapJoiner mapJoiner= Joiner.on("; ").withKeyValueSeparator(",");
return mapJoiner.join(ImmutableMap.of("张三",20,"李四",21));
//return "张三,20; 李四,21"

Splitter(拆分器)

Splitter是对字符串进行切割的工具,JDK的String.split会自动丢弃尾随的分隔符,并且分割后的不会处理空字符串,而Splitter使用简单流式编程,完全控制所有这些令人困惑的行为。

Splitter.on(',')
    .trimResults()
    .omitEmptyStrings()
    .split("foo,bar,,   qux");

返回包含“foo”、“bar”、“qux”的Iterable<String >。Splitter(拆分器)可以设置为对任何PatterncharString或者CharMatcher进行拆分。

工厂方法

Method 方法Description 描述Example 举个栗子
Splitter.on(char)出现特定的单个字符时进行拆分。
Splitter.on(';')
Splitter.on(CharMatcher)在某个类别中出现任何字符时进行拆分。
Splitter.on(CharMatcher.BREAKING_WHITESPACE)
Splitter.on(CharMatcher.anyOf(";,."))
Splitter.on(String)Split on a literal String.Splitter.on(", ")
Splitter.on(Pattern)
Splitter.onPattern(String)
在正则表达式上拆分。
Splitter.onPattern("\r?\n")
Splitter.fixedLength(int)将字符串拆分为指定固定长度的子字符串。最后一块可以小于length,但永远不会为空。Splitter.fixedLength(3)

修饰方法

Method 方法Description 描述Example 举个栗子
omitEmptyStrings()从结果中自动忽略空字符串Splitter.on(',').omitEmptyStrings().split("a,,c,d") 返回 "a", "c", "d"
trimResults()移除掉结果字符串中的前/后空格; 等效于 trimResults(CharMatcher.WHITESPACE)方法Splitter.on(',').trimResults().split("a, b, c, d") 返回 "a", "b", "c", "d"
trimResults(CharMatcher)移除掉结果字符串中的匹配“字符串匹配器”的字符Splitter.on(',').trimResults(CharMatcher.is('_')).split("_a ,_b_ ,c__") 返回 "a ", "b_ ", "c".
limit(int)限制拆分出的字符串数量Splitter.on(',').limit(3).split("a,b,c,d") 返回 "a", "b", "c,d"

CharMatcher(字符匹配器)

CharMatcher适用一些处理复杂字符串的情况,对比传统正则表达式,CharMatcher提供API以更简洁更直观的方式进行字符串处理。

判定方法

判定型函数,判断 CharMacher 和入参字符串的匹配关系。类似于正则表达式中的Pattern。

方法描述
any()匹配任意字符
none()不匹配任何字符的匹配器,与any()相反.
whitespace()匹配所有空格
breakingWhitespace()匹配所有可换行的空白字符
invisible()匹配所有不可见字符
javaLetter()匹配字母(含中文)
javaDigit()匹配unicode数字
javaLetterOrDigit()匹配字母(含中文)或数字
javaIsoControl()匹配iso控制字符
javaLowerCase()匹配所有小写字符
javaUpperCase()匹配所有大写字符
ascii()用于匹配ASCII字符
singleWidth()匹配单字宽字符
anyOf(CharSequence)表明你想匹配的所有字符,例如:CharMatcher.anyOf("aeiou") 可以匹配小写元音字母。
is(char)表明你想匹配的一个确定的字符。
inRange(char, char)表明你想匹配的一个字符范围,例如:CharMatcher.inRange('a', 'z')

匹配函数

CharMatcher 提供了很多方法来对匹配的字符序列 CharSequence 进行操作。以下只是列出了一些常用方法。类似于正则表达式中的Pattern的match方法。

方法描述
collapseFrom(CharSequence, char)将一组连续匹配的字符串替换为一个指定的字符。例如:WHITESPACE.collapseFrom(string, ' ') 可以将连续的空字符串替换为单个字符。
matchesAllOf(CharSequence)测试字符序列是否全部匹配。例如:ASCII.matchesAllOf(string) 可以测试字符是否全部是 ASCII。
removeFrom(CharSequence)将匹配的字符序列移除
retainFrom(CharSequence)将没有匹配的字符序列移除
trimFrom(CharSequence)去除开头和结尾匹配的部分
replaceFrom(CharSequence, CharSequence)将匹配的字符替换为给定的序列

使用CharMatcher

使用CharMatcher先使用判定函数再使用匹配函数,类似于构建Pattern然后match操作。

// 删除控制字符
String noControl = CharMatcher.javaIsoControl().removeFrom(string); 
// 只有数字
String theDigits = CharMatcher.digit().retainFrom(string); 
//去除末尾的空白,并将空白替换/折叠成单个空格
String spaced = CharMatcher.whitespace().trimAndCollapseFrom(string, ' ');
// 替换所有数字
String noDigits = CharMatcher.javaDigit().replaceFrom(string, "*"); 
//去除所有不是数字或小写的字符
String lowerAndDigit = CharMatcher.javaDigit().or(CharMatcher.javaLowerCase()).retainFrom(string);

参考资料

https://github.com/google/guava/wiki/StringsExplained