Carattere di nuova riga in StringBuilder


89

Come si aggiunge un nuovo carattere di riga (\ n \ r) StringBuilder?


17
Non è una nuova riga in nessun sistema operativo comune. Windows è \ r \ n, Mac è \ r, Unix e Linux sono \ n.
Ben Voigt

2
Pedanticamente "newline" è sempre "\ n". Era il carattere del cambio piatto nei telescriventi meccanici. "ritorno a capo" è sempre "\ r". Era il personaggio di ritorno a capo nei telescriventi. Ogni sistema operativo può interpretarli in modo diverso. In Unix / Linux il ritorno generalmente non viene utilizzato perché non è necessario perché non è più un sistema meccanico.
Jay

6
@Jay: Un carattere che causa solo lo spostamento della platina non viene indicato come nuova riga, ma avanzamento riga.
Ben Voigt

Risposte:


126

Vorrei utilizzare il file proprietà Environment.NewLine .

Qualcosa di simile a:

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

Se desideri avere una nuova riga dopo ogni aggiunta, puoi dare un'occhiata alla risposta di Ben Voigt .


2
È possibile combinare Append e AppendLine per ottenere nuove righe dove vuoi, non dopo ogni Append. Inoltre, mi sono collegato alla versione senza argomenti di AppendLine che non aggiunge altro che la sequenza di nuova riga.
Ben Voigt

4
Stringbuilder.AppendLine () fa la stessa cosa di sb.Append (Environment.NewLine); È anche più ordinato, direi ( msdn.microsoft.com/en-us/library/ebk18257.aspx )
Mulki

3
Tieni presente che Environment.NewLine sui sistemi unix non è "\ r \ n", quindi se stai implementando qualcosa specificato come "\ r \ n", devi scriverlo nel codice invece di chiamare AppendLine.
hultqvist

1
@hultqvist: Meglio usare AppendLinesu uno StreamWriter, quindi inserirà la sequenza di nuova riga appropriata per quel particolare StreamWritere non semplicemente Environment.NewLine. Ad esempio, se apri un flusso legato a una connessione SMTP, puoi impostare la sua NewLineproprietà su "\ r \ n" e quindi otterrai un handshake SMTP valido anche su Unix.
Ben Voigt

1
AppendLine è più semplice di questo metodo.
Antonio Mano




5

Usa le funzioni integrate della riga di accodamento di StringBuilder:

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

Produzione

First line
Second line
Third line

2
StringBuilder sb = new StringBuilder();

Puoi usare sb.AppendLine () o sb.Append (Environment.NewLine) ;


1

Per più righe il modo migliore che trovo è farlo:

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

In questo modo non devi ingombrare lo schermo con Environment.NewLine o AppendLine () ripetuti più volte. Sarà anche meno soggetto a errori rispetto al dover ricordare di digitarli.


1

Basta creare un'estensione per 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
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.