Guava 之 Joiner 和 Splitter
最近在给客户准备一个Guava的分享,所以会陆续的更新关于Guava更多的细节分享。本文将记录Guava中得字符串处理Joiner(连接)和Splitter(分割)处理。
Joiner
首先我们来看看下面我们经常遇见的一个案例:
题目: 对于一个如下定义List Listlist =of("1", "2", null, “3”); 按照’,’分割,并过滤掉null。
如果不用第三方库,如common-lange,Guava,用原生java,我们将怎么继续?
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版本呢?
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
题目: 生产一个查询id: 123,name: green的学生信息的url。
利用Guava的MapJoinner的代码如下:
Joiner.on("&").withKeyValueSeparator("=").join(ImmutableMap.of("id", "123", "name", "green"));
这里采用了on传入map item之间分隔符,以及withKeyValueSeparator传递map项key/value之间的分隔符。所以能够很简单的实现,不用我们在去实现一个的for循环代码。
MapSplitter
题目: 对url中的查询字符串"id=123&name=green"进行分割
利用Guava的MapSplitter的代码如下:
final Mapjoin = Splitter.on("&").withKeyValueSeparator("=").split("id=123&name=green");
这里同样利用on传入字符串的第一分隔符,withKeyValueSeparator传入项的分隔符,产生map的key/value项,其结果是一个{id=123, name=green}的Map对象。
推荐阅读
每个Java程序员必备的8个开发工具
本文由码农网 –王国峰原创翻译,转载请看清文末的转载要求,欢迎参与我们的付费投稿计划!现在有很多库、实用工具和程序任J...
Java实战之医院管理系统的实现
目录项目介绍环境需要技术栈使用说明效果图展示核心代码用户管理控制层医生管理控制层病房管理控制层项目介绍医院管理系统,分为管理员、医...
elasticsearch索引index之Translog数据功能分析
目录translog的结构及写入方式translogFile的继承关系TranslogFile快照的方法总结translog的结构...
java实现简单发送邮件功能
Java实现图片比率缩放
Java中的JetCache 实战
elasticsearch索引index之engine读写控制结构实现
目录engine的实现结构Engine类的方法:如index方法的实现:总结engine的实现结构elasticsearch对于...
elasticsearch索引index之Mapping实现关系结构示例
目录Mapping的实现关系结构Mapper的三类parse方法部分Field总结Mapping的实现关系结构Lucene索引的...
LeetCode 动态规划之矩阵区域和详情
目录题目题解解题分析解题代码题目矩阵区域和给你一个mxn的矩阵mat和一个整数k,请你返回一个矩阵answer,其中每个a...
elasticsearch索引的创建过程index create逻辑分析
目录索引的创建过程materOperation方法实现clusterservice处理建立索引修改配置总结索引的创建过程从本篇...