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(拆分器)可以设置为对任何Pattern
, char
, String
或者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);
参考资料
Leave a Reply