Karakter baris baru di StringBuilder

89

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

pengguna274364
sumber
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 .

Adriaan Stander
sumber
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
77

Dengan metode AppendLine .

َََ

Ben Voigt
sumber
Ini akan menyenangkan jika memiliki jumlah kelebihan beban yang sama dengan Append (). Sepertinya pengawasan.
pengguna441521
5

Ini akan ditambahkan \ndi Linux sebagai gantinya \r\n.

Kerry Jiang
sumber
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
Lijo
sumber
2
StringBuilder sb = new StringBuilder();

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

Janmejay Kumar
sumber
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.

pengguna859400
sumber
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
Paul Ishak
sumber