【问题标题】:Combine multiple strings into one JAVA将多个字符串合并为一个 JAVA
【发布时间】:2013-09-15 10:29:23
【问题描述】:

我有一组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,

【问题讨论】:

  • 你真的想要两个逗号吗?
  • 你是什么意思:这对我不起作用
  • 鉴于您的输入,您希望这些额外的逗号如何出现?

标签: java string concatenation


【解决方案1】:

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


我建议使用org.assertj.core.util.String 中的concat(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");

使用 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);

【讨论】:

    【解决方案2】:

    或者我们可以使用 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()
    

    【讨论】:

      【解决方案3】:

      也许你只是在寻找

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

      Reference

      【讨论】:

      • ,Dog,,Cat,,Mouse, 的期望输出不匹配。
      • 好吧String csvString = "," + String.join(",,", string1, string2, string3) +"," ;
      【解决方案4】:

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

      【讨论】:

        【解决方案5】:

        或者,如果您使用的是 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&lt;String&gt;) 修改为如下所示:

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

        这样做后,新的输出将是:

        Cat,Dog,Mouse

        【讨论】:

          【解决方案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();
          

          【讨论】:

          • String finalS = finalStringb.toString() 真的帮了我!
          【解决方案7】:

          最好使用StringBuilder

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

          【讨论】:

          • 甚至sb.append(",").append(tempString).append(",");
          • @Pshemo 是的,这样更好。我添加了你的建议。
          • +1 如果没有必要,您可以使用sb.deleteCharAt(sb.lastIndexOf(",")); 删除最后插入的逗号
          • 删除最后一个分隔符(在这种情况下为逗号)的代码看起来并不老派,我建议通过 java 流使用 StringJoiner 或 StringJoiner,正如我在下面的答案中提到的那样。这有很好的美学:)
          • @Rituraj 由您决定。如果您要使用 Java 8,是的。你可以。这个问题甚至在 Java 8 之前就已经发布了。
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2015-02-05
          • 2017-10-25
          • 2018-10-31
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多