guava之Joiner 和 Splitter(转)
2016-06-03 11:14
274 查看
最近在给客户准备一个Guava的分享,所以会陆续的更新关于Guava更多的细节分享。本文将记录Guava中得字符串处理Joiner(连接)和Splitter(分割)处理。
如果不用第三方库,如common-lange,Guava,用原生java,我们将怎么继续?
是不是很简单,但是繁琐,而且这里还有个坑,我们使用append的方式,在每次for完成后,我们必须去修正remove最后的分隔符:builder.setLength(builder.length() delimiter.length());
Guava版本呢?
我们不在考虑更多的细节,并且很有语义的告诉代码的阅读者,用什么分隔符,需要过滤null值再join。
note:当然我们也可以用common-lange来很简单的完成:StringUtils.join(stringList, delimiter).但是个人推荐尽量使用Guava替代common-lange,因为Guava还有更多的有用方法,后续会陆续介绍,还有就是Guava的API相对更有语意一点。
利用Guava的MapJoinner的代码如下:
这里采用了on传入map item之间分隔符,以及withKeyValueSeparator传递map项key/value之间的分隔符。所以能够很简单的实现,不用我们在去实现一个的for循环代码。
利用Guava的MapSplitter的代码如下:
这里同样利用on传入字符串的第一分隔符,withKeyValueSeparator传入项的分隔符,产生map的key/value项,其结果是一个{id=123, name=green}的Map对象。
http://www.cnblogs.com/whitewolf/p/4214749.html
Joiner
首先我们来看看下面我们经常遇见的一个案例:题目: 对于一个如下定义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(); } |
Guava版本呢?
1 2 3 4 5 6 | public static String joinByGuava(List stringList, String delimiter) { return Joiner .on(delimiter) .skipNulls() .join(stringList); } |
note:当然我们也可以用common-lange来很简单的完成:StringUtils.join(stringList, delimiter).但是个人推荐尽量使用Guava替代common-lange,因为Guava还有更多的有用方法,后续会陆续介绍,还有就是Guava的API相对更有语意一点。
Splitter
MapJoinner和MapSplitter
对于MapJoinner和MapSplitter的最好案例就是url的param编码。MapJoinner
题目: 生产一个查询id: 123,name: green的学生信息的url。
利用Guava的MapJoinner的代码如下:
1 | Joiner.on("&").withKeyValueSeparator("=").join(ImmutableMap.of("id", "123", "name", "green")); |
MapSplitter
题目: 对url中的查询字符串"id=123&name=green"进行分割
利用Guava的MapSplitter的代码如下:
1 | final Map<String, String> join = Splitter.on("&").withKeyValueSeparator("=").split("id=123&name=green"); |
http://www.cnblogs.com/whitewolf/p/4214749.html
相关文章推荐
- 二叉树的先序、中序、后序遍历
- 经典回帖语句
- memcache的优点与缺点
- VS2010+QT5.1+opencv2.4.5图像界面第一个程序(改了一些,现在QT5.4,OPENCV2.4.10)
- 华为机试---密码验证合格程序
- AsyncyTask源码
- 从kubernetes看如何设计超大规模资源调度系统
- Java代码编写规范(不是标准规范,自行整理,无须纠结)
- 如何在Unity中画抛物线
- 性别、年龄预测
- 性能测试与LoadRunner笔记
- shell-列出文本文件行号
- Reverse Linked List
- 内容在某div中滚动
- Nginx配置性能优化(转)
- 在Linux中让打印带颜色的字
- typedef 和 #define 的区别
- Mysql安装注意事项、安装失败的五个原因
- java垃圾回收算法之-标记清除
- 浅谈OC中的指针