Karakter baris baru di StringBuilder


89

Bagaimana Anda menambahkan karakter baris (\ n \ r) baru StringBuilder?


17
Itu bukan baris baru di bawah OS umum mana pun. Windows adalah \ r \ n, Mac adalah \ r, Unix dan Linux adalah \ n.
Ben Voigt

2
Pedantically 'newline' selalu '\ n'. Itu adalah karakter pergeseran pelat dalam teletipe mekanis. 'carriage return' selalu '\ r'. Itu adalah karakter pengembalian kereta dalam teletipe. Setiap sistem operasi dapat menafsirkannya secara berbeda. Di Unix / Linux pengembalian umumnya tidak digunakan karena tidak diperlukan lagi karena ini bukan lagi sistem mekanis.
Jay

6
@ Jay: Karakter yang hanya menyebabkan pergeseran pelat tidak disebut sebagai baris baru, tetapi umpan baris.
Ben Voigt

Jawaban:


126

Saya akan menggunakan properti Environment.NewLine .

Sesuatu seperti:

StringBuilder sb = new StringBuilder();
sb.AppendFormat("Foo{0}Bar", Environment.NewLine);
string s = sb.ToString();

Atau

StringBuilder sb = new StringBuilder();
sb.Append("Foo");
sb.Append("Foo2");
sb.Append(Environment.NewLine);
sb.Append("Bar");
string s = sb.ToString();

Jika Anda ingin memiliki baris baru setelah setiap penambahan, Anda dapat melihat jawaban Ben Voigt .


2
Anda dapat mencampur Append dan AppendLine untuk mendapatkan baris baru di tempat yang Anda inginkan, bukan setelah setiap Append. Juga, saya menautkan ke versi tanpa argumen dari AppendLine yang tidak menambahkan apapun kecuali urutan baris baru.
Ben Voigt

4
Stringbuilder.AppendLine () melakukan hal yang sama seperti sb.Append (Environment.NewLine); Ini juga lebih rapi menurut saya ( msdn.microsoft.com/en-us/library/ebk18257.aspx )
Mulki

3
Ketahuilah bahwa Environment.NewLine pada sistem unix bukanlah "\ r \ n" jadi jika Anda mengimplementasikan sesuatu yang dispesifikasikan sebagai "\ r \ n" maka Anda harus menuliskannya dalam kode daripada memanggil AppendLine.
hultqvist

1
@hultqvist: Lebih baik digunakan AppendLinepada StreamWriter, maka itu akan memasukkan urutan baris baru yang sesuai untuk itu StreamWriterdan bukan hanya Environment.NewLine. Misalnya, jika Anda membuka aliran yang terkait dengan koneksi SMTP, Anda dapat menyetel NewLinepropertinya ke "\ r \ n" dan kemudian Anda akan mendapatkan jabat tangan SMTP yang valid bahkan di Unix.
Ben Voigt

1
AppendLine lebih sederhana dari metode ini.
Antonio Mano




5

Gunakan fungsi bawaan baris tambahan StringBuilder:

StringBuilder sb = new StringBuilder();
sb.AppendLine("First line");
sb.AppendLine("Second line");
sb.AppendLine("Third line");

Keluaran

First line
Second line
Third line

2
StringBuilder sb = new StringBuilder();

Anda dapat menggunakan sb.AppendLine () atau sb.Append (Environment.NewLine) ;


1

Untuk beberapa baris, cara terbaik yang saya temukan adalah melakukan ini:

        IEnumerable<string> lines = new List<string>
        {
            string.Format("{{ line with formatting... {0} }}", id),
            "line 2",
            "line 3"
        };
        StringBuilder sb = new StringBuilder();
        foreach(var line in lines)
            sb.AppendLine(line);

Dengan cara ini Anda tidak perlu mengacaukan layar dengan Environment.NewLine atau AppendLine () diulang beberapa kali. Ini juga akan lebih sedikit rawan kesalahan daripada harus mengingat untuk mengetiknya.


1

Buat saja ekstensi untuk kelas StringBuilder:

Public Module Extensions
    <Extension()>
    Public Sub AppendFormatWithNewLine(ByRef sb As System.Text.StringBuilder, ByVal format As String, ParamArray values() As Object)
        sb.AppendLine(String.Format(format, values))
    End Sub
End Module
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.