2010-03-24 11 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()); 

जाहिर है, इसे ठीक तरह से काम करने की आवश्यकता नहीं है, लेकिन मुझे लगता है कि मुझे मूल बिंदु मिल गया है। हमेशा एक लूप लिखने का विकल्प होता है जो पाठ को स्वयं संसाधित करता है, लेकिन यह अच्छा होगा कि वहां एक मानक जावा क्लास है जो पहले से ही ऐसा कुछ करता है बल्कि मुझे एप्लिकेशन के बीच कक्षा को ले जाने की आवश्यकता होती है, इसलिए मैं कर सकता हूं कुछ बहुत छोटा करो।

धन्यवाद!

उत्तर

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, 'स्ट्रिंगवाइटर' – 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

बस एक सिफारिश: रोमन की 'स्ट्रिंग एलएसपी = 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

मुझे लगता है कि मार्शमेलो 1328 प्रत्येक टोकन के बीच एक नई लाइन चाहता है जब() को –

+0

कहा जाता है, यह वास्तव में है जहां मैंने शुरू किया था। फिर मैं हर पंक्ति के लिए न्यूलाइन चरित्र जोड़ने से थक गया। जबकि मैं आसानी से एक छोटा सा सहायक काम कर सकता था ऐसा करने के लिए, मैं उम्मीद कर रहा था कि मेरी मूल जावा लाइब्रेरी का विस्तार करने के बजाय वहां कुछ भी मौजूद हो सकता है। – 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 सहायक से उपयोग कर सकते हैं। जो एक सूची से एक स्ट्रिंग बनाने की अनुमति देता है। आप 'delimiter' अक्षर/स्ट्रिंग जोड़ सकते हैं।

2

यदि आप बाहरी पुस्तकालयों का उपयोग करने के इच्छुक हैं, तो गुवा में Joiner देखें।

आपका कोड की तरह

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

कुछ करने के लिए जाना होगा जहां parts एक Iterable<String> है।