参见相关。net问题

我正在寻找一种快速简单的方法来做完全相反的分裂 这样["a","b","c"]就会变成"a,b,c"

遍历数组需要添加一个条件(如果这不是最后一个元素,则添加分隔符)或使用substring删除最后一个分隔符。

我相信有一种经过认证的、有效的方法来做到这一点(Apache Commons?)

你喜欢在你的项目中怎么做?


当前回答

对于这个特殊的问题,我更喜欢Guava而不是Apache StringUtils:

Joiner.on(separator).join(array)

与StringUtils相比,Joiner API具有流畅的设计,并且更加灵活,例如,null元素可以被跳过或被占位符替换。此外,Joiner还有一个特性,用于在键和值之间使用分隔符连接映射。

其他回答

在Java 1.8中有一个新的StringJoiner类——所以不需要Guava或Apache Commons:

String str = new StringJoiner(",").add("a").add("b").add("c").toString();

或者直接使用新流api的集合:

String str = Arrays.asList("a", "b", "c").stream().collect(Collectors.joining(","));

对于这个特殊的问题,我更喜欢Guava而不是Apache StringUtils:

Joiner.on(separator).join(array)

与StringUtils相比,Joiner API具有流畅的设计,并且更加灵活,例如,null元素可以被跳过或被占位符替换。此外,Joiner还有一个特性,用于在键和值之间使用分隔符连接映射。

这个选项是快速和清晰的:

  public static String join(String separator, String... values) {
    StringBuilder sb = new StringBuilder(128);
    int end = 0;
    for (String s : values) {
      if (s != null) {
        sb.append(s);
        end = sb.length();
        sb.append(separator);
      }
    }
    return sb.substring(0, end);
  }

Apache Commons Lang确实有一个StringUtils。join方法,将字符串数组与指定的分隔符连接在一起。

例如:

String[] s = new String[] {"a", "b", "c"};
String joined = StringUtils.join(s, ",");  // "a,b,c"

然而,正如您所提到的,我怀疑在上述方法的实际实现中一定存在某种条件或子字符串处理。

如果我要执行String连接,并且没有任何其他使用Commons Lang的原因,我可能会使用自己的来减少对外部库的依赖数量。

public String join(String[] str, String separator){
    String retval = "";
    for (String s: str){ retval+= separator + s;}
    return retval.replaceFirst(separator, "");
}