Carácter de nueva línea en StringBuilder

88

¿Cómo se agrega un carácter de nueva línea (\ n \ r) StringBuilder?

usuario274364
fuente
17
Esa no es una nueva línea en ningún sistema operativo común. Windows es \ r \ n, Mac es \ r, Unix y Linux son \ n.
Ben Voigt
2
Pedadamente, 'nueva línea' es siempre '\ n'. Era el personaje de cambio de platina en los teletipos mecánicos. 'retorno de carro' es siempre '\ r'. Era el carácter de retorno de carro en teletipos. Cada sistema operativo puede interpretarlos de manera diferente. En Unix / Linux, la devolución generalmente no se usa porque es innecesaria porque ya no es un sistema mecánico.
Jay
6
@Jay: un carácter que solo causa un desplazamiento de la platina no se denomina nueva línea, sino salto de línea.
Ben Voigt

Respuestas:

125

Haría uso de la propiedad Environment.NewLine .

Algo como:

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

O

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

Si desea tener una nueva línea después de cada anexo, puede echar un vistazo a la respuesta de Ben Voigt .

Adriaan Stander
fuente
2
Es posible mezclar Append y AppendLine para obtener nuevas líneas donde las desee, no después de cada Append. Además, me vinculé a la versión de argumento cero de AppendLine, que no agrega nada más que la secuencia de nueva línea.
Ben Voigt
4
Stringbuilder.AppendLine () hace lo mismo que sb.Append (Environment.NewLine); También es más ordenado, diría ( msdn.microsoft.com/en-us/library/ebk18257.aspx )
Mulki
3
Tenga en cuenta que Environment.NewLine en sistemas Unix no es "\ r \ n", por lo que si está implementando algo especificado como "\ r \ n", debe escribirlo en el código en lugar de llamar a AppendLine.
hultqvist
1
@hultqvist: Es mejor usarlo AppendLineen un StreamWriter, luego insertará la secuencia de nueva línea apropiada para ese particular StreamWritery no simplemente Environment.NewLine. Por ejemplo, si abre una secuencia vinculada a una conexión SMTP, puede establecer su NewLinepropiedad en "\ r \ n" y luego obtendrá un protocolo de enlace SMTP válido incluso en Unix.
Ben Voigt
1
AppendLine es más simple que este método.
Antonio Mano
75

Con el método AppendLine .

َََ

Ben Voigt
fuente
Esto sería bueno si tuviera el mismo número de sobrecargas que Append (). Parece un descuido.
user441521
5

En su lugar, se agregará \nen Linux \r\n.

Kerry Jiang
fuente
4

Utilice las funciones integradas de añadir línea de StringBuilder:

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

Salida

First line
Second line
Third line
Lijo
fuente
2
StringBuilder sb = new StringBuilder();

Puede utilizar sb.AppendLine () o sb.Append (Environment.NewLine) ;

Janmejay Kumar
fuente
1

Para varias líneas, la mejor manera que encuentro es hacer esto:

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

De esta manera, no tiene que abarrotar la pantalla con Environment.NewLine o AppendLine () repetidos varias veces. También será menos propenso a errores que tener que recordar escribirlos.

user859400
fuente
1

Simplemente cree una extensión para la clase 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
fuente