在 Java 中加入字符串集合的首选习语

2022-09-02 00:59:47

给定一个字符串集合,如何在不使用外部库的情况下以普通的Java连接它们?

给定这些变量:

Collection<String> data = Arrays.asList("Snap", "Crackle", "Pop");
String separator = ", ";
String joined; // let's create this, shall we?

这就是我在番石榴中的做法:

joined = Joiner.on(separator).join(data);

Apache Commons / Lang中:

joined = StringUtils.join(data, separator);

但是在普通的Java中,真的没有比这更好的方法了吗?

StringBuilder sb = new StringBuilder();
for(String item : data){
    if(sb.length()>0)sb.append(separator);
    sb.append(item);
}
joined = sb.toString();

答案 1

我想说的是,不使用番石榴的最佳方法(如果你不是指“最简洁”)是在不使用番石榴内部使用的技术,对于你的例子来说,它看起来像这样:

Iterator<String> iter = data.iterator();
StringBuilder sb = new StringBuilder();
if (iter.hasNext()) {
  sb.append(iter.next());
  while (iter.hasNext()) {
    sb.append(separator).append(iter.next());
  }
}
String joined = sb.toString();

这不必在迭代时执行布尔检查,也不必对字符串进行任何后处理。


答案 2

可能不是在循环中一次又一次地调用sb.length(),我稍微修改了一下。

StringBuilder sb = new StringBuilder();
String separator = "";
for(String item : data){
    sb.append(separator);
    separator=",";
    sb.append(item);
}
joined = sb.toString();