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?


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()


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


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 ).



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

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."));

0

Untuk Kotlin,

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

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


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();

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

1
Ini bahkan bukan jawaban untuk pertanyaan
chntgomez
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.