Caractere de nova linha em StringBuilder


88

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


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 .


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




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

2
StringBuilder sb = new StringBuilder();

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


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.


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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.