Caractère de nouvelle ligne dans StringBuilder

88

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

user274364
la source
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 .

Adriaan Stander
la source
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
75

Avec la méthode AppendLine .

َََ

Ben Voigt
la source
Ce serait bien s'il avait le même nombre de surcharges que Append (). Cela ressemble à un oubli.
user441521
5

Il s'ajoutera \nà la place sous Linux \r\n.

Kerry Jiang
la source
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
Lijo
la source
2
StringBuilder sb = new StringBuilder();

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

Janmejay Kumar
la source
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.

user859400
la source
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
Paul Ishak
la source