Carácter de nueva línea en StringBuilder


88

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


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 .


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




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

2
StringBuilder sb = new StringBuilder();

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


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.


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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.