Символ новой строки в StringBuilder

88

Как добавить символ новой строки (\ n \ r) StringBuilder?

user274364
источник
17
Это не новая строка в любой распространенной ОС. Windows - это \ r \ n, Mac - это \ r, Unix и Linux - \ n.
Бен Фойгт,
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, чтобы получать новые строки там, где вы хотите, а не после каждого добавления. Кроме того, я связался с версией AppendLine без аргументов, которая не добавляет ничего, кроме последовательности новой строки.
Бен Фойгт,
4
Stringbuilder.AppendLine () делает то же самое, что и sb.Append (Environment.NewLine); Также аккуратнее я бы сказал ( msdn.microsoft.com/en-us/library/ebk18257.aspx )
Мульки
3
Имейте в виду, что Environment.NewLine в системах unix не является «\ r \ n», поэтому, если вы реализуете что-то, указанное как «\ r \ n», вы должны написать это в коде, а не вызывать AppendLine.
hultqvist
1
@hultqvist: лучше использовать AppendLineв StreamWriter, тогда он вставит последовательность новой строки, подходящую для этого конкретного, StreamWriterа не просто Environment.NewLine. Например, если вы открываете поток, привязанный к SMTP-соединению, вы можете установить для его NewLineсвойства значение «\ r \ n», и тогда вы получите действительное квитирование SMTP даже в Unix.
Ben Voigt
1
AppendLine проще, чем этот метод.
Антонио Мано
75

С помощью метода AppendLine .

َََ

Бен Фойгт
источник
Было бы неплохо, если бы у него было такое же количество перегрузок, как у Append (). Похоже на недосмотр.
user441521
5

\nВместо этого он будет добавлен в Linux \r\n.

Керри Цзян
источник
4

Используйте встроенные функции добавления строки StringBuilder:

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

Выход

First line
Second line
Third line
Lijo
источник
2
StringBuilder sb = new StringBuilder();

Вы можете использовать sb.AppendLine () или sb.Append (Environment.NewLine) ;

Джанмеджай Кумар
источник
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);

Таким образом, вам не нужно загромождать экран многократно повторяющимися функциями Environment.NewLine или AppendLine (). Это также будет менее подвержено ошибкам, чем необходимость не забывать их вводить.

user859400
источник
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
Пол Исхак
источник