Существует ли простой способ связать несколько строк текста в строку, постоянно не добавляя новую строку?

Таким образом, я по существу должен сделать это:

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 там, который уже делает что-то вроде этого, а не меня бывший должный нести класс вокруг между приложениями именно так я могу сделать что-то таким образом тривиальное.

Спасибо!

13
задан Marshmellow1328 24 March 2010 в 15:54
поделиться

8 ответов

Вы можете использовать StringWriter , заключенный в PrintWriter :

StringWriter stringWriter = new StringWriter();
PrintWriter writer = new PrintWriter(stringWriter, true);
writer.println("line1");
writer.println("line2");
writer.println("line3");
useString(stringWriter.toString());
15
ответ дан 1 December 2019 в 19:49
поделиться

Вы можете использовать StringBuffer

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

Это не будет добавлять символ новой строки, но вы, безусловно, можете добавить его для каждой строки.

1
ответ дан 1 December 2019 в 19:49
поделиться

Вы можете использовать из Apache Commons помощника StringUtils.join. Что позволяет построить строку из списка. Вы можете добавить символ / строку «разделитель».

2
ответ дан 1 December 2019 в 19:49
поделиться

Возможно, самый низкий метод воздействия - это добавление статического метода с новой строкой к StringBuilder .

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

Но @Joachim Sauer превосходит меня в моем предпочтительном решении.Для более сложных примеров вы можете использовать собственный декоратор Writer , например @Rahul G (используйте только частные поля).

0
ответ дан 1 December 2019 в 19:49
поделиться

Если вы не без ума от производительности, я думаю, что это чисто и аккуратно.

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();
  }
}
0
ответ дан 1 December 2019 в 19:49
поделиться

Если вы хотите использовать внешние библиотеки, посмотрите Joiner в Guava.

Ваш код будет выглядеть примерно так

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

, где частей - это Iterable .

2
ответ дан 1 December 2019 в 19:49
поделиться

AFAIK не существует библиотечного класса, который позволяет это сделать.

Ниже приведена следующая работа:

class DesiredStringThinger {
  StringBuilder text = new StringBuilder();

  public void append(String s) { text.append(s).append("\n"); }

  @Override
  public String toString() { return text.toString(); }
}
8
ответ дан 1 December 2019 в 19:49
поделиться
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
ответ дан 1 December 2019 в 19:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: