2010-03-24 17 views
10

Bu yüzden aslında bunu yapmam gerekiyor:Sürekli olarak yeni satır eklemeksizin, bir satırdaki metin satırlarını birleştirmenin kolay bir yolu var mı?

String text = "line1\n"; 
text += "line2\n"; 
text += "line3\n"; 
useString(text); 

Daha fazla yer var ama bu temel fikir. Orada bir şey yapmama izin verecek bir şey var mı?

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

Açıkçası, tam olarak böyle çalışmasına gerek yok, ama bence temel noktayı karşılıyorum. Metni kendim işleyen bir döngü yazma seçeneğim her zaman vardır, ancak standart bir Java sınıfı varsa zaten böyle bir şey yapmaktan çok hoş olurdu. Bunun yerine uygulamalar arasında bir sınıf taşımak zorundayım. çok önemsiz bir şey yapmak.

Teşekkürler!

cevap

15

Sen PrintWriter bir sarılmış bir StringWriter kullanabilirsiniz:

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

1, yaklaşık 'StringWriter' – missingfaktor

+0

Teşekkür bilmiyordum, o bana yardımcı oldu .. –

9

AFAIK, bunu yapmanıza izin veren bir kütüphane sınıfı yok.

şu yok ama iş:

class DesiredStringThinger { 
    StringBuilder text = new StringBuilder(); 

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

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

Doğru olsa da, bu, göreceli olarak az sayıda çizgi ile performans sorunlarına neden olacaktır: Romanın çözümü bu açıdan çok daha iyidir. –

+0

Sadece bir öneri: @ Roman'ın 'String lsp = System.getProperty ("line.separator"); ama özel bir statik üye olarak ilan et – Yaneeve

+2

@Tomislav: Nasıl? – 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

Bu yeni satır karakteri ekler olmayacak, ama kesinlikle de o ekleyebilirsiniz bir StringBuffer

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

kullanabilirsiniz her satır için.

+1

Ben Marshmellow1328 ekleme() Ben nerede başladığını kolayca küçük bir yardımcı işlevi yarattı olabilir iken bu. Sonra her satır için satır karakteri eklenerek yoruldu. Aslında –

+0

denir her belirteci arasına yeni bir çizgi istiyor bunu yapmak için, orada umuyordum zaten benim temel java kütüphanesi genişletmek zorunda ziyade orada var bir şey olabilir. – Marshmellow1328

1

Belki en düşük darbe yöntemi StringBuilder için yeni bir satırın ile eklemek için statik bir yöntem eklemektir.

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

Ancak tercih ettiğim çözüm için @Joachim Sauer beni vuruyor. Daha karmaşık örnekler için, kendi Writer dekoratörünüzü @Rahul G (yalnızca özel alanları kullanın) olarak kullanmak isteyebilirsiniz.

1

Performans konusunda deli değilseniz, bunun temiz ve düzenli olduğunu düşünüyorum.

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

Sen Apache Commons StringUtils.join yardımcı den kullanabilirsiniz. Hangi bir listeden bir dize oluşturmanıza izin verir. 'Sınırlayıcı' karakterini/dizesini ekleyebilirsiniz.

2

Dış kitaplıkları kullanmak istiyorsanız, Guava'da Joiner'a bakın. parts bir Iterable<String> olduğu

Kodunuz

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

gibi bir şey gider.

İlgili konular