将多个字符串组合成一个字符串,使用Java。

7

我有一组字符串,我想将它们合并成一个字符串,并用逗号(“,”)分隔所有句子,就像在 .csv 文件中一样。

这是我的代码:

String dataContainer;

for (String tempString : setInput) {
    String finalString = "," + tempString + ",";   
}

这对我不起作用 :(

但是对于Set应该可以,例如:

Set<String> setInput = new TreeSet();
setInput.add("Dog");
setInput.add("Cat");
setInput.add("Mouse");

生成字符串的代码:
,Dog,,Cat,,Mouse,

3
你真的想要两个逗号吗? - Jonathan Drapeau
这句话的意思是:“这对我不起作用。” - Philipp Sander
根据您的输入,您希望这些额外的逗号如何显示? - NomadMaker
7个回答

17

最好使用StringBuilder

StringBuilder sb = new StringBuilder();

for(String tempString:setInput){
    sb.append(",").append(tempString).append(",");   
}

5
甚至可以这样写:sb.append(",").append(tempString).append(","); - Pshemo
@Pshemo 是的,这样更好。我加入了您的建议。 - Ruchira Gayan Ranaweera
2
如果不必要,您可以使用 sb.deleteCharAt(sb.lastIndexOf(",")); 删除最后插入的逗号。 - Nandkumar Tekale
删除最后一个分隔符的代码看起来有点老式,我建议使用StringJoiner或通过Java流使用StringJoiner,就像我在下面的答案中提到的那样。那样更美观 :) - Rituraj
@Rituraj,这取决于你自己的决定。如果你选择使用Java 8,那么是可以的。这个问题最初发布时甚至还没有Java 8。 - Ruchira Gayan Ranaweera
是的。我知道这是一个旧问题,我只是尝试提供一些背景,以防有人使用较新版本的Java。对于较早的版本,我通常更喜欢来自Google的Guava。 - Rituraj

7

或者我们可以使用Java 8 Stream。

String joined = Stream.of("A", "B", "C").collect(Collectors.joining("delimiter", "prefix", "suffix"));

或者使用StringJoiner类

Directly Use StringJoiner class

或者使用 StringBuilder 类。
new StringBuilder().add("A").add("B").toString()

6
你正在每次都 初始化 你的结果字符串。
实际上,你想要的是:
String finalString ="";
for(String tempString:setInput){
      finalString += "," + tempString + "," ;   
}

然而,上述方法会导致多个String的创建。

我建议使用StringBuilder

 StringBuilder finalStringb =new StringBuilder();
    for(String tempString:setInput){
          finalStringb.append(",").append(tempString).append(",") ;   
    }

String finalS = finalStringb.toString();

"String finalS = finalStringb.toString()" 真的帮了我很多! - simoconfa

4
也许你只是在寻找以下内容:

String csvString = "," + String.join(",,", string1, string2, string3) +"," ;

参考资料


无法匹配所需的输出 ,Dog,,Cat,,Mouse, - O.O.Balance
好的,所以 String csvString = "," + String.join(",,", string1, string2, string3) +"," ; - Dalton

3

解决方案1:(如果您不需要分隔符)


我建议使用org.assertj.core.util.Stringconcat(Object... objects)函数。

public static String concat(Object... objects) {
    return Arrays.isNullOrEmpty(objects) ? null : (String)java.util.Arrays.stream(objects).map(String::valueOf).collect(Collectors.joining());
}

您可以像这样使用它:

  concat("string1", "string2", "string3", "string4");

方案2使用StringJoiner(Java 8+):


这是来自于java.util的类。你甚至可以指定一个前缀和后缀。

StringJoiner stringJoiner = new StringJoiner(", ");
 
stringJoiner.add("string1");
stringJoiner.add("string2");
stringJoiner.add("string3");
 
assertEquals("string1, string2, string3", stringJoiner.toString());

解决方案3:使用Collectors.joining(Java 8+):


这是Java 8 Stream API的一项功能。

List<String> stringList = Arrays.asList("string1", "string2", "string3");
 
String concatString = stringList.stream().collect(Collectors.joining(", "));
 
assertEquals("string1, string2, string3", concatString);

2

如果您使用的是Java 8,您可以尝试类似于以下内容:

public static String join(final Set<String> set){
    return new StringBuilder(",").append(set.stream().collect(Collectors.joining(",,"))).append(",").toString();
}

public static void main(String args[]){
    Set<String> setInput = new TreeSet<>();
    setInput.add("Dog");
    setInput.add("Cat");
    setInput.add("Mouse");
    System.out.println(join(setInput));
}

输出结果如下:

,猫,,狗,,老鼠,

尽管我有点不确定为什么您希望在每个元素之间有2个逗号,并在开头和结尾处有一个逗号。如果您只想要一个逗号分隔每个元素(并且开头或结尾没有逗号),请将join(Set<String>)修改为以下内容:
public static String join(final Set<String> set){
    return set.stream().collect(Collectors.joining(",")); //change "," to ", " for spacing
}

完成后,新的输出将是:

猫,狗,老鼠


1

org.apache.commons.lang.StringUtils.join()可以派上用场。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接