guava之Joiner 和 Splitter

最近在给客户准备一个Guava的分享,因此会陆续的更新关于Guava更多的细节分享。本文将记录Guava中得字符串处理Joiner(链接)和Splitter(分割)处理。java

Joiner

首先咱们来看看下面咱们常常碰见的一个案例:app

题目:
对于一个以下定义List

   List<String> list = new ArrayList<String>("1", "2", null, “3”);

按照’,’分割,并过滤掉null。

若是不用第三方库,如common-lange,Guava,用原生java,咱们将怎么继续?ui

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public static String join(List stringList, String delimiter) {  StringBuilder builder = new StringBuilder();  for (Object item : stringList) {  if (item != null) {  builder  .append(item)  .append(delimiter);  }  }  builder.setLength(builder.length() delimiter.length());  return builder.toString(); } 

是否是很简单,可是繁琐,并且这里还有个坑,咱们使用append的方式,在每次for完成后,咱们必须去修正remove最后的分隔符:builder.setLength(builder.length() delimiter.length());编码

Guava版本呢?url

1
2
3
4
5
6
 public static String joinByGuava(List stringList, String delimiter) {  return Joiner  .on(delimiter)  .skipNulls()  .join(stringList);  } 

咱们不在考虑更多的细节,而且颇有语义的告诉代码的阅读者,用什么分隔符,须要过滤null值再join。spa

note:固然咱们也能够用common-lange来很简单的完成:StringUtils.join(stringList, delimiter).可是我的推荐尽可能使用Guava替代common-lange,由于Guava还有更多的有用方法,后续会陆续介绍,还有就是Guava的API相对更有语意一点。code

Splitter

MapJoinner和MapSplitter

对于MapJoinner和MapSplitter的最好案例就是url的param编码。对象

MapJoinner

题目:
生产一个查询id: 123,name: green的学生信息的url。

利用Guava的MapJoinner的代码以下:ip

1
 Joiner.on("&").withKeyValueSeparator("=").join(ImmutableMap.of("id", "123", "name", "green")); 

这里采用了on传入map item之间分隔符,以及withKeyValueSeparator传递map项key/value之间的分隔符。因此可以很简单的实现,不用咱们在去实现一个的for循环代码。rem

MapSplitter

题目:
对url中的查询字符串"id=123&name=green"进行分割

利用Guava的MapSplitter的代码以下:

1
final Map<String, String> join = Splitter.on("&").withKeyValueSeparator("=").split("id=123&name=green"); 

这里一样利用on传入字符串的第一分隔符,withKeyValueSeparator传入项的分隔符,产生map的key/value项,其结果是一个{id=123, name=green}的Map对象。

相关文章
相关标签/搜索