Caractère de nouvelle ligne dans StringBuilder


88

Comment ajouter un caractère de nouvelle ligne (\ n \ r) StringBuilder?


16
Ce n'est pas une nouvelle ligne sous aucun système d'exploitation courant. Windows est \ r \ n, Mac est \ r, Unix et Linux sont \ n.
Ben Voigt

2
Pédantiquement, «nouvelle ligne» est toujours «\ n». C'était le caractère de décalage de plateau dans les télétypes mécaniques. 'retour chariot' est toujours '\ r'. C'était le caractère de retour chariot dans les télétypes. Chaque système d'exploitation peut les interpréter différemment. Sous Unix / Linux, le retour n'est généralement pas utilisé car il n'est pas nécessaire car il ne s'agit plus d'un système mécanique.
Jay

6
@Jay: Un caractère provoquant uniquement un décalage du plateau n'est pas appelé retour à la ligne, mais saut de ligne.
Ben Voigt

Réponses:


125

J'utiliserais la propriété Environment.NewLine .

Quelque chose comme:

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

Si vous souhaitez avoir une nouvelle ligne après chaque ajout, vous pouvez jeter un œil à la réponse de Ben Voigt .


2
Il est possible de mélanger Append et AppendLine pour obtenir de nouvelles lignes où vous le souhaitez, pas après chaque Append. En outre, j'ai lié à la version sans argument d'AppendLine qui n'ajoute rien d'autre que la séquence de nouvelle ligne.
Ben Voigt

4
Stringbuilder.AppendLine () fait la même chose que sb.Append (Environment.NewLine); C'est aussi plus soigné, je dirais ( msdn.microsoft.com/en-us/library/ebk18257.aspx )
Mulki

3
Sachez que Environment.NewLine sur les systèmes Unix n'est pas "\ r \ n" donc si vous implémentez quelque chose spécifié comme "\ r \ n", vous devez l'écrire dans le code plutôt que d'appeler AppendLine.
hultqvist

1
@hultqvist: Mieux vaut utiliser AppendLinesur un StreamWriter, alors il insérera la séquence de nouvelle ligne appropriée pour ce particulier StreamWriteret pas simplement Environment.NewLine. Par exemple, si vous ouvrez un flux lié à une connexion SMTP, vous pouvez définir sa NewLinepropriété sur "\ r \ n" et vous obtiendrez une prise de contact SMTP valide même sous Unix.
Ben Voigt

1
AppendLine est plus simple que cette méthode.
Antonio Mano




4

Utilisez les fonctions intégrées de ligne d'ajout de StringBuilder:

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

Production

First line
Second line
Third line

2
StringBuilder sb = new StringBuilder();

Vous pouvez utiliser sb.AppendLine () ou sb.Append (Environment.NewLine) ;


1

Pour plusieurs lignes, le meilleur moyen que je trouve est de faire ceci:

        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 cette façon, vous n'avez pas à encombrer l'écran avec le Environment.NewLine ou AppendLine () répété plusieurs fois. Ce sera également moins sujet aux erreurs que de devoir se souvenir de les saisir.


1

Créez simplement une extension pour la 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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.