guava之Joiner 和 Splitter(转)

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

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();?
}

是不是很简单,但是繁琐,而且这里还有个坑,我们使用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

题目:
生产一个查询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

题目:
对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对象。

http://www.cnblogs.com/whitewolf/p/4214749.html

时间: 2024-10-28 15:04:10

guava之Joiner 和 Splitter(转)的相关文章

guava之Joiner 和 Splitter

最近在给客户准备一个Guava的分享,所以会陆续的更新关于Guava更多的细节分享.本文将记录Guava中得字符串处理Joiner(连接)和Splitter(分割)处理. Joiner 首先我们来看看下面我们经常遇见的一个案例: 题目: 对于一个如下定义List List<String> list =of("1", "2", null, “3”); 按照’,’分割,并过滤掉null. 如果不用第三方库,如common-lange,Guava,用原生jav

guava教程——Joiner、Splitter

guava是goog1e开源的一套针对java api的扩展工具包,里面包含很多非常实用的方法,在工作中可以提高我们的编码效率: 1.Joiner 将集合按指定字符拼接成字符串: private final List<String> stringList = Arrays.asList( "tom","jack","bob"); private final List<String> stringListWithNullVa

guava的String之Splitter

1.常用方法 摘自官网的部分常用方法说明. Base Factories Method Description Example Splitter.on(char) Split on occurrences of a specific, individual character. Splitter.on(';') Splitter.on(CharMatcher) Split on occurrences of any character in some category. Splitter.on(

java常用重构优化总结--自己亲身体验

代码重构  6大原则:    单一职责原则(一个类最好最好只有一种行为动机,太多承担职责会导致耦合度太高).    开放封闭原则(功能可以扩展,但是不可以内部修改).    依赖倒转原则(应该依赖抽象而不应该依赖具体对象).    里氏代换原则(父类都替换成它的子类程序的行为没有变化. 正是有了里氏代换原则,才使得"开-闭"原则成为了可能).    接口隔离原则(为同一个角色提供宽.窄不同的接口,以对付不同的客户端).    迪米特法则(最少知道原则;如果两个类不必彼此直接通信,那么这

Guava-Optional可空类型

接上篇Guava之Joiner和Splitter,本篇将介绍Guava的另外一个有用的对象Optional,这在Java中Google Guava首先给我们提出可空对象模型的.在其他语言如c#这是已经存在很久的模式,并包含在.net类库中Nullable(Int?也是一个可空类 型). Null sucks 回到本文主题Optional.在我日常编程中NullPointerException是肯定是大家遇见最多的异常错误: 为此Doug Lea曾说过: Null sucks. Sir C. A.

Google Guava 库用法整理&lt;转&gt;

参考: http://codemunchies.com/2009/10/beautiful-code-with-google-collections-guava-and-static-imports-part-1/(2,3,4) http://blog.publicobject.com 更多用法参考http://ajoo.iteye.com/category/119082 附 guava中文api地址http://ifeve.com/google-guava/ 以前这么用: Java代码   M

Guava 教程1-使用 Google Collections,Guava,static imports 编写漂亮代码

文章转载自:http://my.oschina.net/leejun2005/blog/172328 目录:[ - ] 1-使用 GOOGLE COLLECTIONS,GUAVA,STATIC IMPORTS 编写漂亮代码 1.Google Collections一览 2.操作lists和maps 3.静态导入和Eclipse模板 4.Guava走马观花 2-深入探索 GOOGLE GUAVA 库 1.The Guava CharMatcher 2.Joiner and Splitter 3.W

guava源码阅读

Guava工程包含了若干被Google的 Java项目广泛依赖 的核心库,例如:集合 [collections] .缓存 [caching] .原生类型支持 [primitives support] .并发库 [concurrency libraries] .通用注解 [common annotations] .字符串处理 [string processing] .I/O 等等. 所有这些工具每天都在被Google的工程师应用在产品服务中. Guava源码的包图如下:  源码包的简单说明: co

Joiner

Joiner 我们经常需要将几个字符串,或者字符串数组.列表之类的东西,拼接成一个以指定符号分隔各个元素的字符串,比如把 [1, 2, 3] 拼接成 "1 2 3". 在 Python 中我只需要简单的调用 str.join 函数,就可以了,就像这样. ' '.join(map(str, [1, 2, 3])) 到了 Java 中,如果你不知道 Guava 的存在,基本上就得手写循环去实现这个功能,代码瞬间变得丑陋起来. Guava 为我们提供了一套优雅的 API,让我们能够轻而易举的