前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >guava之Joiner 和 Splitter

guava之Joiner 和 Splitter

作者头像
sanmutongzi
发布2020-03-04 14:39:42
7950
发布2020-03-04 14:39:42
举报
文章被收录于专栏:stream processstream process

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

Joiner

首先我们来看看下面我们经常遇见的一个案例:

代码语言:javascript
复制
题目:
对于一个如下定义List

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

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

如果不用第三方库,如common-lange,Guava,用原生java,我们将怎么继续?

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版本呢?

1 2 3 4 5 6

public static String joinByGuava(List stringList, String delimiter) {
 return Joiner .on(delimiter) .skipNulls() .join(stringList); }

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

note:当然我们也可以用common-lange来很简单的完成:StringUtils.join(stringList, delimiter).但是个人推荐尽量使用Guava替代common-lange,因为Guava还有更多的有用方法,后续会陆续介绍,还有就是Guava的API相对更有语意一点。

Splitter

MapJoinner和MapSplitter

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

MapJoinner
代码语言:javascript
复制
题目:
生产一个查询id: 123,name: green的学生信息的url。

利用Guava的MapJoinner的代码如下:

1

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

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

MapSplitter
代码语言:javascript
复制
题目:
对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对象。

本博客已经转移个人博客破狼,也有有部分更新,但不保证及时维护,如果你希望及时看到本人的新日志,那请订阅破狼-RSS或者关注微信订阅号"shuang_lang_shuo",且听雪狼和破狼两狼为你ng说道:

作者:破 狼 出处:http://www.cnblogs.com/whitewolf/

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2015-05-12 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Joiner
  • Splitter
  • MapJoinner和MapSplitter
    • MapJoinner
      • MapSplitter
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档