Joiner的用法
Google Guava提供了Joiner类专门用来连接String。
譬如说有个String数组,里面有"a","b","c",我们可以通过使用StringBuilder来创建String "a,b,c"。
Joiner提供了这一类的功能。
譬如:
- Joiner joiner = Joiner.on(";");
- assertEquals("a;b;c", joiner.join(new String[}{"a","b","c"}));
当然Joiner.join还提供了参数为Iterable的overload形式。也就是说你可以传各种List和Set。
如果被连接String里面要过滤null,可以这样:
- Joiner joiner = Joiner.on(";").skipNulls();
- assertEquals("a;c", joiner.join(new String[]{"a",null,"c"}));
或者对null进行替换操作:
- Joiner joiner = Joiner.on(";").useForNull("!");
- assertEquals("a;!;c", joiner.join(new String[]{"a",null,"c"}));
Joiner还提供了appendTo函数,对传入的StringBuilder作处理:
- Joiner joiner = Joiner.on(";");
- StringBuilder ab = new StringBuilder("start: ");
- assertEquals("start: a;b;c", joiner.appendTo(ab, new String[]{"a","b","c"}).toString());
除此之外,相关的MapJoiner类也利用Joiner提供了Map的join功能:
- Map<Integer, String> map = new HashMap<Integer, String>();
- map.put(1, "a");
- map.put(2, "b");
- MapJoiner joiner = Joiner.on(";").withKeyValueSeparator("->");
- assertEquals("1->a;2->b", joiner.join(map));
需要注意的是Joiner类是immutable的。换言之,它是线程安全的,你可以把它static final来用没问题。但是这样的话,正如javadoc所举的例子:
// Bad! Do not do this!Joiner joiner = Joiner.on(',');joiner.skipNulls(); // does nothing!return joiner.join("wrong", null, "wrong");
第1行的Joiner对象就是第3行的对象,第2行的skipNulls()其实是返回一个Joiner的一个匿名子类,而对之前的joiner对象没有影响,所以第3行的Joiner对象根本没有skip null的功能。
Joiner的用法的更多相关文章
- Google Guava 库用法整理<转>
参考: http://codemunchies.com/2009/10/beautiful-code-with-google-collections-guava-and-static-imports- ...
- Guava学习笔记(二):基础(Joiner,Objects,Splitter及Strings)
添加Maven依赖 JoinerTest import com.google.common.base.Joiner; import org.junit.Assert; import org.junit ...
- <正则吃饺子> :关于Guava中 Joiner 和 Splitter 的简单使用
在现在项目中经常看到 这两个类的使用,开始时候不明白具体是做的什么事情,就单独拿出来学习下了,参照了网上的博文,这里主要是简单的讲讲用法. 具体对这两个类,不做过多介绍,有个在线文档,需要的可以自己去 ...
- EditText 基本用法
title: EditText 基本用法 tags: EditText,编辑框,输入框 --- EditText介绍: EditText 在开发中也是经常用到的控件,也是一个比较必要的组件,可以说它是 ...
- jquery插件的用法之cookie 插件
一.使用cookie 插件 插件官方网站下载地址:http://plugins.jquery.com/cookie/ cookie 插件的用法比较简单,直接粘贴下面代码示例: //生成一个cookie ...
- Java中的Socket的用法
Java中的Socket的用法 Java中的Socket分为普通的Socket和NioSocket. 普通Socket的用法 Java中的 ...
- [转载]C#中MessageBox.Show用法以及VB.NET中MsgBox用法
一.C#中MessageBox.Show用法 MessageBox.Show (String) 显示具有指定文本的消息框. 由 .NET Compact Framework 支持. MessageBo ...
- python enumerate 用法
A new built-in function, enumerate() , will make certain loops a bit clearer. enumerate(thing) , whe ...
- [转载]Jquery中$.get(),$.post(),$.ajax(),$.getJSON()的用法总结
本文对Jquery中$.get(),$.post(),$.ajax(),$.getJSON()的用法进行了详细的总结,需要的朋友可以参考下,希望对大家有所帮助. 详细解读Jquery各Ajax函数: ...
随机推荐
- centos7.5英文环境切换到中文环境,再切回中文环境后 ,terminal不能用
1.查看系统日志 less /var/logs/message May 12 21:54:41 localhost python: SELinux is preventing /usr/libexec ...
- GIT的安装及git状态的变更详解
一.安装git环境 (2)Git安装 Centos: yum install -y git Ubuntu: apt-get install git Windows安装git bash软件 注意不要使用 ...
- MyBatis插入时候获取自增主键方法
方法一:(Oralce不支持这种写法) useGeneratedkeys 默认值为 false,含义:设置是否使用JDBC的getGenereatedKeys方法获取主键并赋值到keyProperty ...
- python之sqlite3使用详解
Python SQLITE数据库是一款非常小巧的嵌入式开源数据库软件,也就是说没有独立的维护进程,所有的维护都来自于程序本身.它使用一个文件存储整个数据库,操 作十分方便.它的最大优点是使用方便,功能 ...
- Linux操作命令(三)
本次实验将介绍 Linux 命令中 more.less.head.tail 命令的用法. more less head tail 1.more ·more功能类似cat,cat命令是将整个文件的内容从 ...
- STL容器 -- Priority_Queue
核心:和队列相似,但优先队列中的 “下一个元素” 指的是 “优先级最高” 的元素. 头文件:#include<queue> 普通类型的构造方法: priority_queue<int ...
- 洛谷P2280 [HNOI2003] 激光炸弹 [前缀和]
题目传送门 题目描述 输入输出格式 输入格式: 输入文件名为input.txt 输入文件的第一行为正整数n和正整数R,接下来的n行每行有3个正整数,分别表示 xi,yi ,vi . 输出格式: 输出文 ...
- Memory Allocation with COBOL
Generally, the use of a table/array (Static Memory) is most common in COBOL modules in an applicatio ...
- java 日期validate
public static boolean isValidDate(String str) { boolean convertSuccess=true; // 指定日期格式为四位年/两位月份/两位日期 ...
- UML类图—机房收费系统
UML类图:显示了系统的静态结构,而系统的静态结构构成了系统的概念基础.类图用于对系统中的各种概念进行建模,并描绘他们之间的关系.在类图中,一共包含了一下集中模型元素,分别是:类.接口.依赖关系.关联 ...