2010-03-24 62 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 2010-03-24 16:10:50

+0

謝謝,它幫助我.. – 2014-08-05 07:08:00

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

雖然正確,但這會導致線條數量相對較少時的性能問題:Roman的解決方案在這方面要好得多。 – 2010-03-24 16:02:30

+0

只是推薦:使用@ Roman's'String lsp = System.getProperty(「line.separator」);'但聲明它是一個私人靜態成員 – Yaneeve 2010-03-24 16:03:20

+2

@Tomislav:怎麼樣? – missingfaktor 2010-03-24 16:03:49

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()時需要在每個標記之間換行 – 2010-03-24 16:01:43

+0

這實際上是我開始的地方,然後我厭倦爲每一行添加換行符,雖然我可以輕鬆創建一個小幫助函數要做到這一點,我希望有可能已經存在的東西,而不是擴大我的基本Java庫。 – Marshmellow1328 2010-03-24 18:49:04

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

如果您願意使用外部庫,請查看Guava中的Joiner

您的代碼會去像

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

其中partsIterable<String>

相關問題