Есть ли простой способ конкатенации нескольких строк текста в строку без постоянного добавления новой строки?
Поэтому мне нужно сделать это:
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, который уже делает что-то вроде этого, а не мне нужно проводить класс между приложениями, чтобы я мог сделать что-то настолько тривиальное.
Спасибо!
Ответы
Ответ 1
Вы можете использовать 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
AFAIK нет класса библиотеки, который позволяет это сделать.
Далее выполняется работа:
class DesiredStringThinger {
StringBuilder text = new StringBuilder();
public void append(String s) { text.append(s).append("\n"); }
@Override
public String toString() { return text.toString(); }
}
Ответ 3
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
Вы можете использовать Apache Commons помощник StringUtils.join. Это позволяет построить строку из списка. Вы можете добавить символ/строку разделителя.
Ответ 5
Если вы хотите использовать внешние библиотеки, ознакомьтесь с Joiner в Guava.
Ваш код будет выглядеть примерно так:
String result = Joiner.on("\n").join(parts);
где parts
является Iterable<String>
.
Ответ 6
Вы можете использовать StringBuffer
StringBuffer text = new StringBuffer();
text.append("line1");
text.append("line2");
...
useString(text.toString());
Это не добавит новый символ линии, но вы можете добавить это также для каждой строки.
Ответ 7
Возможно, самый низкий метод воздействия заключается в добавлении статического метода для добавления с новой строкой в StringBuilder
.
public static StringBuilder appendln(StringBuilder buff, String str) {
return buff.append(str).append('\n');
}
Но @Joachim Sauer
бьет меня к моему предпочтительному решению. Для более сложных примеров вы можете использовать собственный декодер Writer
, как @Rahul G
(используйте только частные поля).
Ответ 8
Если вы не сумасшедшие в производительности, я думаю, что это чисто и аккуратно.
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();
}
}
Ответ 9
Вот решение Java 8 с использованием потока:
public class DesiredStringThinger {
private List<String> items = new ArrayList<>();
public void append(String s) {
items.add(s);
}
@Override
public String toString() {
return items.stream().collect(Collectors.joining("\n", "", "\n"));
}
}