Znak nowego wiersza w StringBuilder

88

Jak dołączyć znak nowej linii (\ n \ r) StringBuilder?

user274364
źródło
17
To nie jest nowa linia w żadnym popularnym systemie operacyjnym. Windows to \ r \ n, Mac to \ r, Unix i Linux to \ n.
Ben Voigt,
2
Pedantycznie „nowa linia” to zawsze „\ n”. To była zmiana plattena w mechanicznych teletypach. „powrót karetki” to zawsze „\ r”. Był to znak powrotu karetki w teletypach. Każdy system operacyjny może interpretować je inaczej. W systemach Unix / Linux zwrot nie jest generalnie używany, ponieważ jest niepotrzebny, ponieważ nie jest już systemem mechanicznym.
Jay
6
@Jay: Znak powodujący tylko przesunięcie płyty nie jest nazywany nowym wierszem, ale wysuwem wiersza.
Ben Voigt

Odpowiedzi:

125

Skorzystałbym z właściwości Environment.NewLine .

Coś jak:

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

Lub

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

Jeśli chcesz mieć nową linię po każdym dodaniu, możesz spojrzeć na odpowiedź Bena Voigta .

Adriaan Stander
źródło
2
Możliwe jest mieszanie Append i AppendLine, aby uzyskać nowe linie tam, gdzie chcesz, a nie po każdym Append. Ponadto połączyłem się z wersją AppendLine o zerowych argumentach, która dodaje tylko sekwencję nowej linii.
Ben Voigt,
4
Stringbuilder.AppendLine () robi to samo, co sb.Append (Environment.NewLine); Powiedziałbym również, że jest ładniejszy ( msdn.microsoft.com/en-us/library/ebk18257.aspx )
Mulki
3
Należy pamiętać, że Environment.NewLine w systemach uniksowych nie jest "\ r \ n", więc jeśli implementujesz coś określonego jako "\ r \ n", musisz napisać to w kodzie, zamiast wywoływać AppendLine.
hultqvist
1
@hultqvist: Lepiej używać AppendLinena StreamWriter, wtedy wstawi sekwencję nowej linii odpowiednią dla tego konkretnego, StreamWritera nie tylko Environment.NewLine. Na przykład, jeśli otworzysz strumień powiązany z połączeniem SMTP, możesz ustawić jego NewLinewłaściwość na „\ r \ n”, a wtedy otrzymasz poprawne uzgadnianie SMTP nawet w systemie Unix.
Ben Voigt
1
AppendLine jest prostsza niż ta metoda.
Antonio Mano
75

Za pomocą metody AppendLine .

َََ

Ben Voigt
źródło
Byłoby miło, gdyby miał taką samą liczbę przeciążeń jak Append (). Wygląda na przeoczenie.
user441521
5

\nZamiast tego zostanie dołączony do systemu Linux \r\n.

Kerry Jiang
źródło
4

Użyj wbudowanych funkcji dołączania linii StringBuildera:

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

Wynik

First line
Second line
Third line
Lijo
źródło
2
StringBuilder sb = new StringBuilder();

Możesz użyć sb.AppendLine () lub sb.Append (Environment.NewLine) ;

Janmejay Kumar
źródło
1

W przypadku wielu wierszy najlepszym sposobem jest zrobienie tego:

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

W ten sposób nie musisz zaśmiecać ekranu wielokrotnym powtarzaniem Environment.NewLine lub AppendLine (). Będzie też mniej podatny na błędy niż konieczność pamiętania o ich wpisaniu.

user859400
źródło
1

Po prostu utwórz rozszerzenie dla klasy 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
źródło