Таким образом, я по существу должен сделать это:
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 там, который уже делает что-то вроде этого, а не меня бывший должный нести класс вокруг между приложениями именно так я могу сделать что-то таким образом тривиальное.
Спасибо!
Вы можете использовать StringWriter
, заключенный в PrintWriter
:
StringWriter stringWriter = new StringWriter();
PrintWriter writer = new PrintWriter(stringWriter, true);
writer.println("line1");
writer.println("line2");
writer.println("line3");
useString(stringWriter.toString());
Вы можете использовать StringBuffer
StringBuffer text = new StringBuffer();
text.append("line1");
text.append("line2");
...
useString(text.toString());
Это не будет добавлять символ новой строки, но вы, безусловно, можете добавить его для каждой строки.
Вы можете использовать из Apache Commons помощника StringUtils.join. Что позволяет построить строку из списка. Вы можете добавить символ / строку «разделитель».
Возможно, самый низкий метод воздействия - это добавление статического метода с новой строкой к StringBuilder
.
public static StringBuilder appendln(StringBuilder buff, String str) {
return buff.append(str).append('\n');
}
Но @Joachim Sauer
превосходит меня в моем предпочтительном решении.Для более сложных примеров вы можете использовать собственный декоратор Writer
, например @Rahul G
(используйте только частные поля).
Если вы не без ума от производительности, я думаю, что это чисто и аккуратно.
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();
}
}
Если вы хотите использовать внешние библиотеки, посмотрите Joiner в Guava.
Ваш код будет выглядеть примерно так
String result = Joiner.on("\n").join(parts);
, где частей
- это Iterable
.
AFAIK не существует библиотечного класса, который позволяет это сделать.
Ниже приведена следующая работа:
class DesiredStringThinger {
StringBuilder text = new StringBuilder();
public void append(String s) { text.append(s).append("\n"); }
@Override
public String toString() { return text.toString(); }
}
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);
}