代码之家  ›  专栏  ›  技术社区  ›  Marshmellow1328

有没有一种简单的方法可以将几行文本连接成一个字符串,而不必不断地追加换行符?

  •  11
  • Marshmellow1328  · 技术社区  · 14 年前

    所以我必须这样做:

    String text = "line1\n";
    text += "line2\n";
    text += "line3\n";
    useString( text );
    

    有更多的参与,但这是基本的想法。有没有什么可以让我做更多的事情呢?

    DesiredStringThinger text = new DesiredStringThinger();
    text.append( "line1" );
    text.append( "line2" );
    text.append( "line3" );
    useString( text.toString() );
    

    显然,它不需要像那样工作,但我想我已经明白了基本点。总是有一个选项写一个循环来处理我自己的文本,但是如果有一个标准的Java类已经做了这样的事情,而不是我需要在应用程序之间进行一个类,这样我就可以做一些琐碎的事情,那就太好了。

    谢谢!

    8 回复  |  直到 14 年前
        1
  •  15
  •   Joachim Sauer    14 年前

    你可以用 StringWriter 包裹在 PrintWriter :

    StringWriter stringWriter = new StringWriter();
    PrintWriter writer = new PrintWriter(stringWriter, true);
    writer.println("line1");
    writer.println("line2");
    writer.println("line3");
    useString(stringWriter.toString());
    
        2
  •  8
  •   missingfaktor Kevin Wright    14 年前

    但是没有库类允许您这样做。

    但是,以下是工作:

    class DesiredStringThinger {
      StringBuilder text = new StringBuilder();
    
      public void append(String s) { text.append(s).append("\n"); }
    
      @Override
      public String toString() { return text.toString(); }
    }
    
        3
  •  4
  •   Roman    14 年前
    public String createString () {
       StringBuilder sb = new StringBuilder ();
       String txt = appendLine("firstline", sb).appendLine("2ndLine", sb).toString();
    }
    
    private StringBuilder appendLine (String line, StringBuilder sb) {
       String lsp = System.getProperty("line.separator");
       return sb.append (line).append (lsp);
    }
    
        4
  •  2
  •   GandalfIX    14 年前

    你可以使用 Apache Commons stringutils.join助手。它允许从列表中生成字符串。可以添加“分隔符”字符/字符串。

        5
  •  2
  •   Carl    14 年前

    如果您愿意使用外部库,请查看 Joiner 番石榴。

    你的代码会变成

    String result = Joiner.on("\n").join(parts);
    

    哪里 parts 是一个 Iterable<String> .

        6
  •  1
  •   rayd09    14 年前

    可以使用stringbuffer

    StringBuffer text = new StringBuffer();
    text.append("line1");  
    text.append("line2");  
    ...  
    useString(text.toString());   
    

    这不会追加新行字符,但您当然也可以为每行追加该字符。

        7
  •  0
  •   Tom Hawtin - tackline    14 年前

    可能影响最小的方法是在 StringBuilder .

     public static StringBuilder appendln(StringBuilder buff, String str) {
         return buff.append(str).append('\n');
     }
    

    但是 @Joachim Sauer 比我更喜欢的解决方案。对于更复杂的示例,您可能需要使用自己的 Writer 装饰工 @Rahul G (仅使用专用字段)。

        8
  •  0
  •   Enno Shioji    14 年前

    如果你不喜欢表演的话,我觉得这是干净整洁的。

    class DesiredStringThinger {
      StringBuilder sb = new StringBuilder();
    
      public void concat(String... s) { 
          for(String str : s){
             sb.append(s).append("\n");
          }
      }
    
      @Override
      public String toString() { 
          return sb.toString();
      }
    }