咱们在日常开发中,经常会遇到要把一个数组转化成一个字符串的情况,简单粗暴的话肯定是直接上String的简单拼接
protected String argsToString(Object[] paramArray) {
String budiler = "";
for (Object o : paramArray) {
budiler += o.toString();
budiler += ", ";
}
return budiler;
}
Upgrade #1
自己写的话,一般会用一个StringBuilder,一个for循环搞定就像下面这样:
protected String argsToString(Object[] paramArray) {
StringBuilder budiler = new StringBuilder();
for (Object o : paramArray) {
budiler.append(JSON.toJSONString(o));
budiler.append(COMMA);
}
return budiler.toString();
}
Upgrade #2
上面的这种示例会存在一个问题,就是我们得到的结果的字符串末尾总会多一个分隔符
key=Tom, Jerry, HelloKitty,
这样使我们不得不很拙略地想要去把最后一个subString()
一下。
protected String argsToString(Object[] paramArray) {
StringBuilder budiler = new StringBuilder();
for (Object o : paramArray) {
budiler.append(o.toString());
budiler.append(COMMA);
}
//拙略地去除最后的分隔符
return budiler.substring(0,budiler.length()-COMMA.length());
}
Upgrade #3
其实Google Guava
里面已经有了一个Joiner
组件很方便地帮我们拼接,用起来简直不要太简单。
import com.google.common.base.Joiner;
/**
* 参数处理工具类
* @author <a href="i@qiancheng.me">千橙</a>
*/
public class Util {
/** separator */
private static final String COMMA = ", ";
/** 把对象数组拼接成字符串 */
public static String argsToString(Object[] paramArray) {
return Joiner.on(COMMA).
useForNull("null"). // NPE 替换为 字符串 null
join(new StringBuilder(),paramArray).
toString();
}
}
最为感人的是,这个Joiner
不仅支持对象数组,还有对集合类的支持重载方法。源码如下:
public <A extends Appendable> A appendTo(A appendable, Iterator<?> parts) throws IOException {
checkNotNull(appendable);
if (parts.hasNext()) {
appendable.append(toString(parts.next()));
while (parts.hasNext()) {
appendable.append(separator);
appendable.append(toString(parts.next()));
}
}
return appendable;
}
看了源码让人感动得泪流满面的是Guava
还有一个MapJoiner
来实现键值对的字符串拼接,妈妈再也不用担心我手动拼接Map的字符串啦!
Code with JDK8
/** 把对象数组拼接成字符串 */
public static String argsToString(Object[] paramArray) {
StringJoiner joiner = new StringJoiner(COMMA);
for (Object o : paramArray) {
joiner.add(o.toString());
}
return joiner.toString();
}
我还是觉得 Google Guava 的方案最简洁。
天下大事,合(Joiner
)久必分(Splitter
)。更加感人的组件Splitter
以及对于URL处理的一些工具我们下次再见。
Reference