Caractere de nova linha em StringBuilder

88

Como você anexa um caractere de nova linha (\ n \ r) StringBuilder?

user274364
fonte
16
Isso não é uma nova linha em qualquer sistema operacional comum. Windows é \ r \ n, Mac é \ r, Unix e Linux são \ n.
Ben Voigt
2
Pedanticamente 'nova linha' é sempre '\ n'. Era o personagem de deslocamento do platten em teletipos mecânicos. 'retorno de carro' é sempre '\ r'. Era o caractere de retorno de carro em teletipos. Cada sistema operacional pode interpretá-los de maneira diferente. Em Unix / Linux o retorno geralmente não é usado porque é desnecessário porque não é mais um sistema mecânico.
Jay
6
@Jay: Um caractere que causa apenas deslocamento do cilindro não é conhecido como nova linha, mas como avanço de linha.
Ben Voigt

Respostas:

125

Eu usaria a propriedade Environment.NewLine .

Algo como:

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

Ou

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

Se desejar ter uma nova linha após cada acréscimo, você pode dar uma olhada na resposta de Ben Voigt .

Adriaan Stander
fonte
2
É possível misturar Append e AppendLine para obter novas linhas onde você quiser, não após cada Append. Além disso, vinculei à versão de argumento zero de AppendLine que não acrescenta nada além da sequência de nova linha.
Ben Voigt
4
Stringbuilder.AppendLine () faz a mesma coisa que sb.Append (Environment.NewLine); Também é mais puro, eu diria ( msdn.microsoft.com/en-us/library/ebk18257.aspx )
Mulki
3
Esteja ciente de que o Environment.NewLine em sistemas unix não é "\ r \ n", portanto, se você estiver implementando algo especificado como "\ r \ n", deverá escrevê-lo no código em vez de chamar AppendLine.
hultqvist
1
@hultqvist: Melhor usar AppendLineem um StreamWriter, então ele irá inserir a sequência de nova linha apropriada para aquele particular StreamWritere não apenas Environment.NewLine. Por exemplo, se você abrir um fluxo vinculado a uma conexão SMTP, poderá definir sua NewLinepropriedade como "\ r \ n" e obterá um handshake SMTP válido mesmo no Unix.
Ben Voigt
1
AppendLine é mais simples do que este método.
Antonio Mano
75

Com o método AppendLine .

َََ

Ben Voigt
fonte
Isso seria bom se tivesse o mesmo número de sobrecargas que Append (). Parece um descuido.
user441521
5

Em \nvez disso, será anexado no Linux \r\n.

Kerry Jiang
fonte
4

Use as funções integradas de linha anexa do StringBuilder:

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

Resultado

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

Você pode usar sb.AppendLine () ou sb.Append (Environment.NewLine) ;

Janmejay Kumar
fonte
1

Para várias linhas, a melhor maneira que encontro é fazer isso:

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

Dessa forma, você não precisa desordenar a tela com Environment.NewLine ou AppendLine () repetidos várias vezes. Também será menos sujeito a erros do que ter que se lembrar de digitá-los.

user859400
fonte
1

Basta criar uma extensão para a classe 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
fonte