将多个字符串组合成一个JAVA

时间:2013-09-11 11:55:21

标签: java string concatenation

我有一组strings想要合并为一个String,所有句子都用逗号分隔,例如(*.csv)

以下是我的观点:

String dataContainer;

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

这对我不起作用:(
但它应该适用于Set ex:

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

生成字符串:

,Dog,,Cat,,Mouse,

7 个答案:

答案 0 :(得分:17)

最好使用StringBuilder

 StringBuilder sb= new StringBuilder();

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

答案 1 :(得分:6)

您每次执行的结果字符串都是intializing

实际上,你想做

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

答案 2 :(得分:5)

或者我们可以使用Java 8 Stream

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

或者

Directly Use StringJoiner class

new StringBuilder().add("A").add("B").toString()

答案 3 :(得分: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));
}

输出结果为:

,Cat,,Dog,,Mouse,

虽然,我有点不确定你为什么要在每个元素和开头和结尾的逗号之间使用2个逗号。如果您只想要一个逗号分隔每个元素(并且在开头或结尾没有逗号),请将join(Set<String>)修改为如下所示:

public static String join(final Set<String> set){
    return set.stream().collect(Collectors.joining(",")); //change "," to ", " for spacing
}

执行此操作后,新输出将为:

Cat,Dog,Mouse

答案 4 :(得分:2)

解决方案1 ​​:(如果不需要定界符)


我建议使用concat(Object... objects)中的org.assertj.core.util.String

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

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


这来自java.util。您甚至可以选择指定前缀和后缀。

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

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


这是Java 8 Stream API的功能。

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

答案 5 :(得分:1)

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

答案 6 :(得分:1)

也许您只在寻找

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

Reference