Символ нового рядка в StringBuilder


88

Як додати новий рядок (\ n \ r) до символу StringBuilder?


17
Це не новий рядок для будь-якої типової ОС. Windows - це \ r \ n, Mac - \ r, Unix та Linux - \ n.
Ben Voigt,

2
Педантично "новий рядок" - це завжди "\ n". Це був характер зсуву валика в механічних телетипах. 'повернення каретки' завжди '\ r'. Це був символ повернення каретки в телетайпах. Кожна операційна система може інтерпретувати їх по-різному. У Unix / Linux повернення зазвичай не використовується, оскільки це непотрібно, оскільки це вже не механічна система.
Джей

6
@Jay: Персонаж, що викликає лише зсув валика, не називається новим рядком, а подачею лінії.
Ben Voigt

Відповіді:


125

Я скористався властивістю Environment.NewLine .

Щось на зразок:

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

Або

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

Якщо ви хочете мати новий рядок після кожного додавання, ви можете переглянути відповідь Бена Войгта .


2
Можна змішувати Append і AppendLine, щоб отримувати нові рядки там, де ви їх хочете, а не після кожного Append. Крім того, я зв’язав версію AppendLine з нульовим аргументом, яка не додає нічого, крім послідовності нового рядка.
Ben Voigt,

4
Stringbuilder.AppendLine () робить те саме, що sb.Append (Environment.NewLine); Це також акуратніше, я б сказав ( msdn.microsoft.com/en-us/library/ebk18257.aspx )
Mulki,

3
Майте на увазі, що Environment.NewLine в системах Unix не є "\ r \ n", тому, якщо ви реалізуєте щось, зазначене як "\ r \ n", то ви повинні писати це в коді, а не викликати AppendLine.
hultqvist

1
@hultqvist: Краще використовувати AppendLineна StreamWriter, тоді він вставить послідовність нових рядків, що підходить саме для цього, StreamWriterа не просто Environment.NewLine. Наприклад, якщо ви відкриєте потік, прив'язаний до з'єднання SMTP, ви можете встановити для його NewLineвластивості значення "\ r \ n", і тоді ви отримаєте дійсне рукостискання SMTP навіть на Unix.
Бен Войгт,

1
AppendLine простіший за цей метод.
Антоніо Мано




4

Використовуйте вбудовані функції рядка додавання StringBuilder:

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

Вихідні дані

First line
Second line
Third line


1

Для кількох рядків найкращий спосіб, який я знаходжу, це зробити:

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

Таким чином, вам не доведеться захаращувати екран середовищем. NewLine або AppendLine () повторюється кілька разів. Це також буде менше схильне до помилок, ніж те, що потрібно пам’ятати про їх введення.


1

Просто створіть розширення для класу 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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.