参见相关。net问题

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

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

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

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


当前回答

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

  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);
  }

其他回答

你可以用正则表达式来使用replace和replaceAll。

String[] strings = {"a", "b", "c"};

String result = Arrays.asList(strings).toString().replaceAll("(^\\[|\\]$)", "").replace(", ", ",");

因为Arrays.asList(). tostring()生成:"[a, b, c]",我们执行replaceAll来删除第一个和最后一个括号,然后(可选地)您可以更改","序列为","(您的新分隔符)。

精简版(字符数更少):

String[] strings = {"a", "b", "c"};

String result = ("" + Arrays.asList(strings)).replaceAll("(^.|.$)", "").replace(", ", "," );

正则表达式非常强大,特别是字符串方法“replaceFirst”和“replaceAll”。试一试吧。

更简单的是,你可以使用数组,所以你会得到一个字符串,数组的值由","隔开

String concat = Arrays.toString(myArray);

所以你会得到这样的结果:concat = "[a,b,c]"

更新

然后,您可以使用Jeff建议的子字符串来消除括号

concat = concat.substring(1, concat.length() -1);

所以你得到concat = "a,b,c"

如果你想使用Kotlin:

 val concat = myArray.joinToString(separator = ",") //"a,b,c"

使用Java 8,你可以用一种非常干净的方式做到这一点:

String.join(delimiter, elements);

这有三种方式:

1)直接指定要素

String joined1 = String.join(",", "a", "b", "c");

2)使用数组

String[] array = new String[] { "a", "b", "c" };
String joined2 = String.join(",", array);

3)使用可迭代对象

List<String> list = Arrays.asList(array);
String joined3 = String.join(",", list);

它在StringUtils中:

http://www.java2s.com/Code/JavaAPI/org.apache.commons.lang/StringUtilsjoinObjectarrayStringseparator.htm

在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(","));