Znak nowego wiersza w StringBuilder


88

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


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 .


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




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

2
StringBuilder sb = new StringBuilder();

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


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.


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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.