कैसे StringBuilder के लिए एक नई लाइन संलग्न करने के लिए


234

मेरे पास एक StringBuilderवस्तु है,

StringBuilder result = new StringBuilder();
result.append(someChar);

अब मैं एक नई चरित्र को जोड़ना चाहता हूं StringBuilder। मैं यह कैसे कर सकता हूं?

result.append("/n"); 

काम नहीं करता। इसलिए, मैं यूनिकोड का उपयोग करके एक नई पंक्ति लिखने के बारे में सोच रहा था। क्या इससे मदद मिलेगी? यदि हां, तो मैं कैसे जोड़ सकता हूं?


23
मैंने सोचा कि यह है "\n", या System.getProperty("line.separator")
एल्विन वोंग

जरूरी नहीं कि एक लाइनलाइन (LF) (Ascii / Unicode 10) चरित्र के लिए एक नई पंक्ति हो। जैसा कि सही उत्तर बताता है, जावा में आप एक (LINE FEED या प्लेटफ़ॉर्म-विशिष्ट न्यूलाइन) प्राप्त कर सकते हैं।
बासिल बोर्के

जवाबों:


510

यह होना चाहिए

r.append("\n");

लेकिन मैं आपको नीचे के रूप में करने की सलाह देता हूं,

r.append(System.getProperty("line.separator"));

System.getProperty("line.separator")आपको जावा में सिस्टम-निर्भर न्यूलाइन देता है। जावा 7 से भी एक विधि है जो सीधे मूल्य लौटाती है:System.lineSeparator()


87
System.lineSeparator शॉर्टकट के लिए +1। बड़ा सवाल यह है कि कोई StringBuilder#appendLine()विधि क्यों नहीं है ।
पैट्रिक एम

14
System.lineSeparator()प्रलेखन में उल्लेख किया गया है "सिस्टम-निर्भर लाइन विभाजक स्ट्रिंग लौटाता है।" यह प्लेटफॉर्म इंडिपेंडेंट नहीं है। इस कोड का उपयोग करें यदि आपको एक स्ट्रिंग लिखने की आवश्यकता है जो अंतर्निहित ऑपरेटिंग सिस्टम द्वारा उपयोग की जाएगी, अन्यथा उपयोग करें '\n'
टस्कलैंड

2
@tuscland - हर समय केवल System.lineSeparator () का उपयोग क्यों नहीं किया जाता है? डिफ़ॉल्ट के रूप में '\ n' एक बेहतर विकल्प क्यों है?
रयानफ़ास्कॉटलैंड

16
System.lineSeparator()जब आप गैर-पोर्टेबल संसाधनों (यानी अंतर्निहित ऑपरेटिंग सिस्टम के लिए विशिष्ट संसाधन) के साथ काम करते हैं , तो इसका उपयोग नहीं किया जाना चाहिए। इसका एक अलग मान है कि आप Windows (\ r \ n) या Unix (\ n) पर जावा चला रहे हैं। यदि आप System.lineSeparator()हर समय उपयोग करते हैं, तो आप गैर पोर्टेबल फ़ाइलों का उत्पादन करेंगे।
tuscland

6
अविश्वसनीय वहाँ पहले से ही एक appendLineअधिभार नहीं है StringBuilder
जोश एम।

22

एक और विकल्प Apache Commons StrBuilder का उपयोग करना है, जिसकी कार्यक्षमता StringBuilder में कमी है।

StrBuilder.appendLn ()

संस्करण के रूप में 3.6 StrBuilder को TextStringBuilder के पक्ष में चित्रित किया गया है जिसमें समान कार्यक्षमता है


5
... और चूंकि Java 8 में StringJoiner है , जो " एक सीमांकक द्वारा अलग किए गए वर्णों के अनुक्रम का निर्माण करने के लिए उपयोग किया जाता है और वैकल्पिक रूप से एक आपूर्ति उपसर्ग के साथ शुरू होता है और एक आपूर्ति प्रत्यय के साथ समाप्त होता है। " "n" के रूप में सीमांकक के परिणामस्वरूप नया होगा। लाइनें (पिछले एक को छोड़कर)। आंतरिक रूप से, यह एक StringBuilder का उपयोग करता है। मुझे लगता है कि Google Guava Joiner का उपयोग करके एक ही दृष्टिकोण महसूस किया जा सकता है।
jechterhoff

1
... और अब यह है deprecated। कृपया उपयोग करें org.apache.commons.text.TextStringBuilder
अशोक एमए

16

पलायन के साथ किया जाना चाहिए \, नहीं /

तो r.append('\n');या r.append("\n");काम करेगा ( प्रकार और प्रकार के StringBuilderलिए अतिभारित तरीके हैं )।charString



2

मैं मूल वर्ग बनाता हूं जो StringBuidler के समान है और विधि appendLine (स्ट्रिंग str) को कॉल करके लाइन को जोड़ सकता है।

public class StringBuilderPlus {

    private StringBuilder sb;

    public StringBuilderPlus(){
         sb = new StringBuilder();
    }

    public void append(String str)
    {
        sb.append(str != null ? str : "");
    }

    public void appendLine(String str)
    {
        sb.append(str != null ? str : "").append(System.getProperty("line.separator"));
    }

    public String toString()
    {
        return sb.toString();
    }
}

उपयोग:

StringBuilderPlus sb = new StringBuilderPlus();
sb.appendLine("aaaaa");
sb.appendLine("bbbbb");
System.out.println(sb.toString());

कंसोल:

aaaaa
bbbbb

1

आप String.format(देखें java.util.Formatter) में लाइन सेपरेटर कैरेक्टर का भी उपयोग कर सकते हैं , जो कि प्लेटफॉर्म एग्नॉस्टिक भी है।

अर्थात:

result.append(String.format("%n", ""));

यदि आपको अधिक पंक्ति स्थान जोड़ने की आवश्यकता है, तो बस उपयोग करें:

result.append(String.format("%n%n", ""));

आप StringFormatअपने पूरे स्ट्रिंग को प्रारूपित करने के लिए उपयोग कर सकते हैं , अंत में एक नई रेखा के साथ।

result.append(String.format("%10s%n%n", "This is my string."));

0

कोटलिन के लिए,

StringBuilder().appendln("your text");

हालांकि यह एक जावा सवाल है, यह भी kotlin के लिए पहला Google परिणाम है, काम में आ सकता है।


सवाल "जावा" के तहत टैग किया गया है। एक समाधान पोस्ट करने की आवश्यकता नहीं है जो प्रश्न से संबंधित भाषा के लिए भी नहीं है।
22

@chntgomez मैंने कोटलिन में स्ट्रिंगबर्ल के लिए एक नई रेखा को जोड़ने के लिए एक रास्ता खोजा और यह पाया :-)
अलेक्जेंडर पोलेशुक

0

StringBuilderPlus वर्ग बनाने और एक अंतिम वर्ग का विस्तार करने के लिए थेरेपी एडेप्टर पैटर्न का उपयोग करने के लिए KS की प्रतिक्रिया के अलावा, यदि आप जेनरिक का उपयोग करते हैं और नए परिशिष्ट और परिशिष्ट विधियों में StringBuilderPlus ऑब्जेक्ट लौटाते हैं, तो आप StringBuilders के कई एपेंड विधियों का उपयोग कर सकते हैं। सभी अलग-अलग प्रकारों के लिए, स्ट्रिंग स्ट्रिंग कई एपेंड कमांड को एक साथ रखने की क्षमता प्राप्त करते हुए, जैसा कि नीचे दिखाया गया है

public class StringBuilderPlus {

    private final StringBuilder stringBuilder;

    public StringBuilderPlus() {
        this.stringBuilder = new StringBuilder();
    }

    public <T> StringBuilderPlus append(T t) {
        stringBuilder.append(t);
        return this;
    }

    public <T> StringBuilderPlus appendLine(T t) {
        stringBuilder.append(t).append(System.lineSeparator());
        return this;
    }

    @Override
    public String toString() {
        return stringBuilder.toString();
    }

    public StringBuilder getStringBuilder() {
        return stringBuilder;
    }
}

फिर आप इसे मूल StringBuilder वर्ग की तरह उपयोग कर सकते हैं:

StringBuilderPlus stringBuilder = new StringBuilderPlus();
stringBuilder.appendLine("test")
    .appendLine('c')
    .appendLine(1)
    .appendLine(1.2)
    .appendLine(1L);

stringBuilder.toString();

-2

Android के लिए , इसे पढ़ें और लिखें के लिए उपयोग करें!

private void writeToFile(String message) {
        try {
            OutputStream outputStream = openFileOutput("todoList.txt",Context.MODE_PRIVATE);
            OutputStreamWriter outputStreamWriter = new OutputStreamWriter(outputStream);
            outputStreamWriter.write(message);
            outputStreamWriter.close();

        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    private String readFromFile() throws IOException {

        String result = "";
        InputStream inputStream = openFileInput("todoList.txt");

        if (inputStream != null) {
            InputStreamReader inputStreamReader = new InputStreamReader(inputStream);
            BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
            String tempString = "";
            StringBuilder stringBuilder = new StringBuilder();

            while ( (tempString = bufferedReader.readLine()) != null ) {

                stringBuilder.append(tempString);
                stringBuilder.append("\n");
            }
            inputStream.close();
            result = stringBuilder.toString();
        }
        return result;
    }

1
यह प्रश्न का उत्तर भी नहीं है
chntgomez
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.