Google Guava提供了Joiner类专门用来连接String。

譬如说有个String数组,里面有"a","b","c",我们可以通过使用StringBuilder来创建String "a,b,c"。

Joiner提供了这一类的功能。

譬如:

  1. Joiner joiner = Joiner.on(";");
  2. assertEquals("a;b;c", joiner.join(new String[}{"a","b","c"}));

当然Joiner.join还提供了参数为Iterable的overload形式。也就是说你可以传各种List和Set。

如果被连接String里面要过滤null,可以这样:

  1. Joiner joiner = Joiner.on(";").skipNulls();
  2. assertEquals("a;c", joiner.join(new String[]{"a",null,"c"}));

或者对null进行替换操作:

  1. Joiner joiner = Joiner.on(";").useForNull("!");
  2. assertEquals("a;!;c", joiner.join(new String[]{"a",null,"c"}));

Joiner还提供了appendTo函数,对传入的StringBuilder作处理:

  1. Joiner joiner = Joiner.on(";");
  2. StringBuilder ab = new StringBuilder("start: ");
  3. assertEquals("start: a;b;c", joiner.appendTo(ab, new String[]{"a","b","c"}).toString());

除此之外,相关的MapJoiner类也利用Joiner提供了Map的join功能:

  1. Map<Integer, String> map = new HashMap<Integer, String>();
  2. map.put(1, "a");
  3. map.put(2, "b");
  4. MapJoiner joiner = Joiner.on(";").withKeyValueSeparator("->");
  5. assertEquals("1->a;2->b", joiner.join(map));

需要注意的是Joiner类是immutable的。换言之,它是线程安全的,你可以把它static final来用没问题。但是这样的话,正如javadoc所举的例子:

  1. // Bad! Do not do this!  
  2. Joiner joiner = Joiner.on(',');  
  3. joiner.skipNulls(); // does nothing!  
  4. return joiner.join("wrong", null, "wrong");  

 

第1行的Joiner对象就是第3行的对象,第2行的skipNulls()其实是返回一个Joiner的一个匿名子类,而对之前的joiner对象没有影响,所以第3行的Joiner对象根本没有skip null的功能。

Joiner的用法的更多相关文章

  1. Google Guava 库用法整理<转>

    参考: http://codemunchies.com/2009/10/beautiful-code-with-google-collections-guava-and-static-imports- ...

  2. Guava学习笔记(二):基础(Joiner,Objects,Splitter及Strings)

    添加Maven依赖 JoinerTest import com.google.common.base.Joiner; import org.junit.Assert; import org.junit ...

  3. <正则吃饺子> :关于Guava中 Joiner 和 Splitter 的简单使用

    在现在项目中经常看到 这两个类的使用,开始时候不明白具体是做的什么事情,就单独拿出来学习下了,参照了网上的博文,这里主要是简单的讲讲用法. 具体对这两个类,不做过多介绍,有个在线文档,需要的可以自己去 ...

  4. EditText 基本用法

    title: EditText 基本用法 tags: EditText,编辑框,输入框 --- EditText介绍: EditText 在开发中也是经常用到的控件,也是一个比较必要的组件,可以说它是 ...

  5. jquery插件的用法之cookie 插件

    一.使用cookie 插件 插件官方网站下载地址:http://plugins.jquery.com/cookie/ cookie 插件的用法比较简单,直接粘贴下面代码示例: //生成一个cookie ...

  6. Java中的Socket的用法

                                   Java中的Socket的用法 Java中的Socket分为普通的Socket和NioSocket. 普通Socket的用法 Java中的 ...

  7. [转载]C#中MessageBox.Show用法以及VB.NET中MsgBox用法

    一.C#中MessageBox.Show用法 MessageBox.Show (String) 显示具有指定文本的消息框. 由 .NET Compact Framework 支持. MessageBo ...

  8. python enumerate 用法

    A new built-in function, enumerate() , will make certain loops a bit clearer. enumerate(thing) , whe ...

  9. [转载]Jquery中$.get(),$.post(),$.ajax(),$.getJSON()的用法总结

    本文对Jquery中$.get(),$.post(),$.ajax(),$.getJSON()的用法进行了详细的总结,需要的朋友可以参考下,希望对大家有所帮助. 详细解读Jquery各Ajax函数: ...

随机推荐

  1. 【初探移动前端开发】jQuery Mobile 二

    本文例子请使用手机查看 List列表 在移动设备平台下,由于移动设备屏幕比较小,我们又是用手在上面点击的触屏方式,传统的列表模式在手机上就不太友好了. 虽然HTML5与CSS3提供了强大的界面实现方案 ...

  2. 2018 ACM-ICPC 北京网络赛

    Problem A 最短路,跑一下dij就可以了. Problem B Problem C 按照题意模拟,不过坑点很多 1.注意字典序: 2.注意挑战的时候失败的那个人要把当前所有桌子上的牌都拿走 P ...

  3. DelegatingFilterProxy干了什么?

    org.springframework.web.filter.DelegatingFilterProxy 一般情况,创建一个Filter是交给自己来实现的.基于servlet规范,在web.xml中配 ...

  4. Bzoj3837 [Pa2013]Filary(随机化)

    题面 权限题 题解 这题有一个很好的性质,就是一定有$k>\frac n2$.接着考虑怎么做. 我们随机选取一个数$x$,然后将所有数与它作差,那么只需要找出$k$个差值使得他们的最大公因数大于 ...

  5. Cobol online program 传指针

  6. [BZOJ4832]抵制克苏恩(概率期望DP)

    方法一:倒推,最常规的期望DP.f[i][a][b][c]表示还要再攻击k次,目前三种随从个数分别为a,b,c的期望攻击英雄次数,直接转移即可. #include<cstdio> #inc ...

  7. SNOI2017(BZOJ5015~5018)泛做

    T1:礼物 想错方向了,实际上很简单. 我想的是:显然题目求的是$\sum_{i=1}^{n} i^{k}2^{i}$,然后或许可以通过化式子变成与n无关的复杂度? 然后就不停往斯特林数反演和下降幂的 ...

  8. JZYZOJ1535 [haoi2014]穿越封锁线

    http://172.20.6.3/Problem_Show.asp?id=1535 整体来说是道水题,但是穿过点的判定把我坑得wa了两次,考场上这可是40分的水分啊啊啊. 开始的错误想法:排序后向上 ...

  9. 2017 Multi-University Training 2 解题报告

    Is Derek lying? Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)T ...

  10. 【推导】计蒜客17116 2017 ACM-ICPC 亚洲区(西安赛区)网络赛 C. Sum

    题意:S(x)被定义为x的十进制表示下的数位之和.给你x,让你找一个正整数k,使得S(kx)能被233整除.k不超过2千位. 由于x不超过1000000,不论x是多少,10000000重复233次一定 ...