it-swarm.com.de

Wie füge ich Zeilenumbrüche in Strings ein?

In .NET kann ich sowohl \r- als auch \n-String-Literale angeben, aber es gibt eine Möglichkeit, Etwas wie "neue Zeile" ein Sonderzeichen wie Environment.NewLine statische Eigenschaft einzufügen.

134
Captain Comic

Nun, einfache Optionen sind:

  • string.Format:

    string x = string.Format("first line{0}second line", Environment.NewLine);
    
  • String-Verkettung:

    string x = "first line" + Environment.NewLine + "second line";
    
  • String-Interpolation (in C # 6 und höher):

    string x = $"first line{Environment.NewLine}second line";
    

Sie könnten auch\n überall verwenden und ersetzen:

string x = "first line\nsecond line\nthird line".Replace("\n",
                                                         Environment.NewLine);

Beachten Sie, dass Sie dies nicht als String constant definieren können, da der Wert von Environment.NewLine nur zur Ausführungszeit verfügbar ist.

274
Jon Skeet

Wenn Sie eine const-Zeichenfolge wünschen, die Environment.NewLine enthält, können Sie Folgendes tun:

const string stringWithNewLine =
@"first line
second line
third line";

BEARBEITEN

Da es sich hierbei um einen const-String handelt, wird dies in der Compile-Zeit ausgeführt. Daher handelt es sich um die Interpretation einer Newline durch den Compiler. Ich kann anscheinend keine Referenz finden, die dieses Verhalten erklärt, aber ich kann beweisen, dass es wie beabsichtigt funktioniert. Ich habe diesen Code sowohl unter Windows als auch unter Ubuntu (mit Mono) kompiliert und dann demontiert. Dies sind die Ergebnisse:

Disassemble on WindowsDisassemble on Ubuntu

Wie Sie sehen, werden Zeilenumbrüche in Windows als\r\n und unter Ubuntu als\n interpretiert

26
Tal Jerome
var sb = new StringBuilder();
sb.Append(first);
sb.AppendLine(); // which is equal to Append(Environment.NewLine);
sb.Append(second);
return sb.ToString();
11
abatishchev

Eine weitere Möglichkeit der bequemen Platzierung von Environment.NewLine in der Formatzeichenfolge ..__ Die Idee ist, eine String-Erweiterungsmethode zu erstellen, die die Zeichenfolge wie üblich formatiert, aber auch {nl} im Text durch Environment.NewLine ersetzt

Verwendungszweck

   " X={0} {nl} Y={1}{nl} X+Y={2}".FormatIt(1, 2, 1+2);
   gives:
    X=1
    Y=2
    X+Y=3

Code

    ///<summary>
    /// Use "string".FormatIt(...) instead of string.Format("string, ...)
    /// Use {nl} in text to insert Environment.NewLine 
    ///</summary>
    ///<exception cref="ArgumentNullException">If format is null</exception>
    [StringFormatMethod("format")]
    public static string FormatIt(this string format, params object[] args)
    {
        if (format == null) throw new ArgumentNullException("format");

        return string.Format(format.Replace("{nl}", Environment.NewLine), args);
    }

Hinweis

  1. Wenn Sie möchten, dass ReSharper Ihre Parameter hervorhebt, fügen Sie der obigen Methode ein Attribut hinzu

    [StringFormatMethod ("format")]

  2. Diese Implementierung ist offensichtlich weniger effizient als nur String.Format 

  3. Vielleicht interessiert sich auch einer, der sich für diese Frage interessiert, für die nächste Frage: Benannte String-Formatierung in C #

3
MajesticRa
string myText =
    @"<div class=""firstLine""></div>
      <div class=""secondLine""></div>
      <div class=""thirdLine""></div>";

das ist es nicht:

string myText =
@"<div class=\"firstLine\"></div>
  <div class=\"secondLine\"></div>
  <div class=\"thirdLine\"></div>";
2
Hakkı Eser
static class MyClass
{
   public const string NewLine="\n";
}

string x = "first line" + MyClass.NewLine + "second line"
1
user386349

neuere .net-Versionen ermöglichen es Ihnen, $ vor dem Literal zu verwenden, wodurch Sie Variablen wie folgt verwenden können:

var x = $"Line 1{Environment.NewLine}Line 2{Environment.NewLine}Line 3";
0
DanielK

Wenn Sie die New Line-Zeichenfolge wirklich als Konstante haben möchten, können Sie Folgendes tun:

public readonly string myVar = Environment.NewLine;

Der Benutzer des Schlüsselworts readonly in C # bedeutet, dass diese Variable nur einmal zugewiesen werden kann. Die Dokumentation dazu finden Sie hier . Es erlaubt die Deklaration einer konstanten Variablen, deren Wert erst zur Ausführungszeit bekannt ist.

0
wizard07KSU

Wenn Sie mit einer Webanwendung arbeiten, können Sie dies versuchen.

StringBuilder sb = new StringBuilder();
sb.AppendLine("Some text with line one");
sb.AppendLine("Some mpre text with line two");
MyLabel.Text = sb.ToString().Replace(Environment.NewLine, "<br />")
0
Tejas Bagade

Wenn ich die Frage verstehe: Paar "\ r\n", um diese neue Zeile in einem Textfeld zu erhalten. Mein Beispiel hat funktioniert -

string s1 = comboBox1.Text; // s1 ist die Variable, die Feld 1 usw. zugewiesen ist. Zeichenfolge s2 = comboBox2.Text;

string Beide = s1 + "\ r\n" + s2; textBox1.Text = beide; Eine typische Antwort könnte s1 .__ sein. s2 im Textfeld mit definiertem Schriftstil.

0
Charles F

Ich mag mehr den "pythonic Weg"

List<string> lines = new List<string> {
    "line1",
    "line2",
    String.Format("{0} - {1} | {2}", 
        someVar,
        othervar, 
        thirdVar
    )
};

if(foo)
    lines.Add("line3");

return String.Join(Environment.NewLine, lines);
0
percebus