2010-03-24 1 views
10

Так что по сути нужно сделать это:Есть ли простой способ объединить несколько строк текста в строку без постоянного добавления новой строки?

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

Спасибо!

ответ

15

Вы можете использовать StringWriter завернутые в PrintWriter:

StringWriter stringWriter = new StringWriter(); 
PrintWriter writer = new PrintWriter(stringWriter, true); 
writer.println("line1"); 
writer.println("line2"); 
writer.println("line3"); 
useString(stringWriter.toString()); 
+1

+1, не знал о 'StringWriter' – missingfaktor

+0

Спасибо, это помогло мне .. –

9

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

Следующая делает работу, хотя:

class DesiredStringThinger { 
    StringBuilder text = new StringBuilder(); 

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

    @Override 
    public String toString() { return text.toString(); } 
} 
+0

Правильно, это вызовет проблемы с производительностью с относительно небольшим количеством строк: решение Романа в этом отношении намного лучше. –

+0

Только рекомендация: используйте @ Roman 'String lsp = System.getProperty ("line.separator"); но объявите его частным статическим членом – Yaneeve

+2

@ Томислав: Как? – missingfaktor

5
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); 
} 
2

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

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

Это не будет добавлять символ новой строки, но можно, конечно, добавить, что, как хорошо для каждой строки.

+1

Я думаю, что Marshmellow1328 хочет новую линию между каждым токеном, когда append() называется –

+0

Это на самом деле я начал. Затем мне стало надоело добавлять символ новой строки для каждой строки. Хотя я мог бы легко создать небольшую вспомогательную функцию чтобы сделать это, я надеялся, что там может быть что-то, что уже существует, вместо того, чтобы расширять мою базовую библиотеку java. – Marshmellow1328

1

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

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

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

1

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

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(); 
    } 
} 
3

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

2

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

Ваш код будет идти к чему-то вроде

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

где parts является Iterable<String>.

 Смежные вопросы

  • Нет связанных вопросов^_^