Cara menambahkan baris baru ke StringBuilder

234

Saya punya StringBuilderobjek,

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

Sekarang saya ingin menambahkan karakter baris baru ke StringBuilder. Bagaimana saya bisa melakukannya?

result.append("/n"); 

Tidak bekerja. Jadi, saya berpikir untuk menulis baris baru menggunakan Unicode. Akankah ini membantu? Jika demikian, bagaimana saya bisa menambahkannya?

Illep
sumber
23
Saya pikir itu "\n", atau System.getProperty("line.separator").
Alvin Wong
Sebuah baris baru tidak selalu FEED GARIS (LF) (Ascii / Unicode 10) karakter. Sebagai jawaban yang benar menunjukkan, di Jawa Anda bisa mendapatkan salah satu (LINE FEED atau baris baru khusus platform).
Basil Bourque

Jawaban:

510

Harus

r.append("\n");

Tapi saya sarankan Anda lakukan seperti di bawah ini,

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

System.getProperty("line.separator")memberi Anda baris baru yang bergantung pada sistem di java. Juga dari Java 7 ada metode yang mengembalikan nilai secara langsung:System.lineSeparator()

Jayamohan
sumber
87
+1 untuk pintasan System.lineSeparator. Pertanyaan yang lebih besar adalah mengapa tidak ada StringBuilder#appendLine()metode.
Patrick M
14
System.lineSeparator()dokumentasi menyebutkan "Mengembalikan string pemisah garis yang bergantung pada sistem.". Ini bukan platform independen. Gunakan kode ini jika Anda perlu menulis string yang akan digunakan oleh sistem operasi yang mendasarinya, jika tidak gunakan '\n'.
tuscland
2
@tuscland - Mengapa tidak hanya menggunakan System.lineSeparator () sepanjang waktu? Mengapa '\ n' opsi yang lebih baik sebagai default?
RyanfaeScotland
16
Tidak, System.lineSeparator()harus digunakan ketika Anda berurusan dengan sumber daya non-portabel (yaitu, sumber daya khusus untuk sistem operasi yang mendasarinya). Ini memiliki nilai yang berbeda apakah Anda menjalankan Java pada Windows (\ r \ n) atau Unix (\ n). Jika Anda menggunakannya System.lineSeparator()setiap saat, Anda akan menghasilkan file yang tidak portabel.
tuscland
6
Tidak bisa dipercaya belum ada appendLinekelebihan pada StringBuilder.
Josh M.
22

Pilihan lain adalah menggunakan Apache Commons StrBuilder, yang memiliki fungsi yang kurang di StringBuilder.

StrBuilder.appendLn ()

Pada versi 3.6 StrBuilder telah ditinggalkan demi TextStringBuilder yang memiliki fungsi yang sama

Half_Duplex
sumber
5
... dan karena Java 8 ada StringJoiner , yang " digunakan untuk membangun urutan karakter yang dipisahkan oleh pembatas dan secara opsional dimulai dengan awalan yang disediakan dan berakhir dengan akhiran yang disediakan. " Menggunakan "\ n" sebagai pembatas akan menghasilkan yang baru baris (kecuali yang terakhir). Secara internal, ia menggunakan StringBuilder. Pendekatan yang sama dapat direalisasikan menggunakan Google Guava Joiner, saya kira.
jechterhoff
1
... dan sekarang ini deprecated. Silakan gunakan org.apache.commons.text.TextStringBuilder.
Ashok MA
16

Melarikan diri harus dilakukan dengan \, bukan /.

Jadi r.append('\n');atau r.append("\n");akan bekerja ( StringBuildermemiliki metode chardan Stringtipe kelebihan beban ).

nhahtdh
sumber
2

Anda dapat menggunakan line.seperatoruntuk menambahkan baris baru di

Rashida Hasan
sumber
2

Saya membuat kelas asli yang mirip dengan StringBuidler dan dapat menambahkan baris dengan memanggil metode appendLine (String 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();
    }
}

Pemakaian:

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

Menghibur:

aaaaa
bbbbb
KS
sumber
1

Anda juga dapat menggunakan karakter pemisah garis dalam String.format(Lihat java.util.Formatter), yang juga merupakan platform agnostik.

yaitu:

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

Jika Anda perlu menambahkan lebih banyak spasi, cukup gunakan:

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

Anda juga dapat menggunakan StringFormatuntuk memformat seluruh string Anda, dengan baris baru di akhir.

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

Untuk Kotlin,

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

Meskipun ini adalah pertanyaan java, ini juga hasil google pertama untuk kotlin, mungkin berguna.

farhan patel
sumber
Pertanyaan ini ditandai di bawah "java". Tidak perlu memposting solusi yang bahkan tidak untuk bahasa yang terkait dengan pertanyaan.
chntgomez
@ chntgomez Saya mencari cara untuk menambahkan baris baru ke StringBuilder di Kotlin dan menemukan ini :-)
Alexander Poleschuk
0

Selain respons KS dalam menciptakan kelas StringBuilderPlus dan memanfaatkan pola adaptornya untuk memperluas kelas final, jika Anda menggunakan generik dan mengembalikan objek StringBuilderPlus dalam metode appendLine dan appendLine baru, Anda dapat menggunakan metode StringBuilder banyak metode tambahan. untuk semua jenis yang berbeda, sambil mendapatkan kembali kemampuan untuk merangkai beberapa perintah tambahkan bersama, seperti yang ditunjukkan di bawah ini

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;
    }
}

Anda kemudian dapat menggunakan ini persis seperti kelas StringBuilder asli:

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

stringBuilder.toString();
Qualia91
sumber
-2

Untuk Android , Gunakan ini untuk Baca dan Tulis!

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;
    }
Abhishek Sengupta
sumber
1
Ini bahkan bukan jawaban untuk pertanyaan
chntgomez