比如有一个数组是 String[] array = [ 'a', 'b', 'c' ],我希望把该数组中每个元素直接用 ' - ' 来拼接,得到 ”a-b-c",那么应该如何实现呢?
最传统的办法就是:
String result = array.get(0);
for(int i = 1; i < array.size(); i++) {
result = result + "-" + item;
}
但是这个方法明显太繁琐,而且还需要判定各种异常情况,比如:如果数组size = 0,那么上面第一句话就会报错。
下面介绍两种方法,只需要一行就能实现字符串拼接操作,简便而且无需考虑很多情况。
1. 使用 org.apache.commons.lang.StringUtils 中的 join 函数。
StringUtils.join(array, "-")
2. 使用 Google Guava 中的 com.google.common.base.Joiner 类。
Joiner.on('-').join(array);
join() 括号中的参数既可以传入 Iterable<?>,又可以传入 @Nullable Object first, @Nullable Object second, Object... rest 。
Guava 对空指针有着严格的限制,如果传入的对象中包含空指针,Joiner 会直接抛出 NullPointer Exception。与此同时,Joiner 提供了两个方法,让我们能够优雅的处理待拼接集合中的空指针。
如果我们希望忽略空指针,那么可以调用 skipNulls 方法,得到一个会跳过空指针的 Joiner 实例。如果希望将空指针变为某个指定的值,那么可以调用 useForNull 方法,指定用来替换空指针的字符串。
Joiner.on(' ').skipNulls().join(1, null, 3); //1 3
Joiner.on(' ').useForNull("None").join(1, null, 3); //1 None 3
需要注意的是,Joiner 实例是不可变的,skipNulls 和 useForNull 都不是在原实例上修改某个成员变量,而是生成一个新的 Joiner 实例。