在本系列的第一篇文章当中,我们介绍了如何使用Guava来简化Map类的操作。本文将继续承接上文的内容。来分享Guava为字符串操作带来的便利。

Joiner:字符串链接工具类

字符串拼接

在日常开发过程中会经常遇到这样一个需求:将一个List中的元素按照逗号分隔拆分成一个字符串,如果使用原生的Java来编写,我们可能需要如下的几步:
1 循环遍历List。
2 判断某一项不为null,就加入String中并添加逗号
3 删除拼接的字符串的最后一个逗号
具体可用如下的代码来表示:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
....
List<String> list = Arrays.asList("A","null","B");
StringBuilder sb = new StringBuilder();
for(String str:list){
if(!Strings.isNullOrEmpty){
sb.append(Str).append(,)
}
}
sb.setLength(stringBuilder.length()-1);
return sb.toString();

功能很简单但是很繁琐吧,而且里面还有很多的坑,比如list需要判空,而且在进行截取操作的时候也需要判空,和长度判断。如何改用Guava实现。可以简化为如下的代码,而且不需要进行各种条件判断。

1
2
3
4
List<String> list = Arrays.asList("A","null","B");
return Joiner.on(",").skipNulls.join(list);

URL拼接

拼接生成一个如下的URL

1
2
http://guochenglai.com?name=gcl&age=26&address=beijing

这里就不在说Java怎么写了直接上Guava的写法:

1
2
String str = "http://guochenglai.com?" +Joiner.on("&").withKeyValueSeparator("=").join(ImmutableMap.of("name","gcl","age","26","address","beijing"));

Spliter:字符串拆分工具类

字符串拆分

1 Spliter类可以方便地根据正则表达式来拆分字符串,可以去电拆分结果中的空串,还可以做trim操作。

1
List<String> splitResults = Splitter.onPattern(",").omitEmptyStrings().trimResults(CharMatcher.NONE).splitToList("hello,word,,世界,,水平,null");

2 Spliter类还可以做二次拆分,将字符串直接拆分成Map。

1
2
3
4
5
6
7
8
9
10
11
12
String str = "id=1;name=gcl,age=26";
//按照正则表达式拆分,拆分结构就一行代码
Map<String, String> map = Splitter.onPattern("[;,]").withKeyValueSeparator("=").split(str);
for (Map.Entry<String, String> entry : map.entrySet()) {
System.out.println(entry.getKey()+"---->"+entry.getValue());
}

URL拆分

将如下URL的参数拆分到Map中

1
2
3
4
5
6
7
8
9
10
11
String url = "http://guochenglai.com?name=gcl&age=26&address=beijing";
//拆分代码就如下一行
Map<String, String> params = Splitter.on("&").withKeyValueSeparator("=").split(url.substring(url.indexOf("?")+1));
for (Map.Entry<String, String> entry : params.entrySet()) {
System.out.println(entry.getKey()+"---->"+entry.getValue());
}

Strings:字符串操作工具类

1 判断字符串是否为Null或者Empty

1
2
boolean isNullOrEmpty = Strings.isNullOrEmpty(input);

2 获得两个字符串相同的前缀或者后缀

1
2
3
String commonPrefix = Strings.commonPrefix(strA,strB);
String commonSuffix = Strings.commonSuffix(strA,strB);

3 Strings的padStart和padEnd方法来补全字符串

1
2
3
String padEndResult = Strings.padEnd("123", 4, '#');
String padStartResult = Strings.padStart("123", 4, '#');