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


88

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


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 проще, чем этот метод.
Антонио Мано




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

Таким образом, вам не нужно загромождать экран многократно повторяющимися функциями Environment.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.