อักขระขึ้นบรรทัดใหม่ใน StringBuilder


89

คุณต่อท้ายอักขระบรรทัดใหม่ (\ n \ r) ในStringBuilderอย่างไร?


17
นั่นไม่ใช่บรรทัดใหม่ภายใต้ระบบปฏิบัติการทั่วไปใด ๆ Windows คือ \ r \ n, Mac คือ \ r, Unix และ Linux คือ \ n
Ben Voigt

2
'newline' มักจะเป็น '\ n' เสมอ มันเป็นอักขระการเลื่อนของแท่นวางในเทเลไทป์เชิงกล 'carriage return' คือ '\ r' เสมอ มันเป็นอักขระการคืนค่าขนส่งในเทเลไทป์ ระบบปฏิบัติการแต่ละระบบอาจตีความแตกต่างกัน ใน Unix / Linux โดยทั่วไปจะไม่ใช้การส่งคืนเนื่องจากไม่จำเป็นเนื่องจากไม่ใช่ระบบกลไกอีกต่อไป
Jay

6
@Jay: อักขระที่ทำให้เกิดการเลื่อนแท่นวางเท่านั้นไม่เรียกว่าขึ้นบรรทัดใหม่ แต่เป็นตัวป้อนบรรทัด
Ben Voigt

คำตอบ:


126

ฉันจะใช้ประโยชน์จากคุณสมบัติ Environment.NewLineคุณสมบัติ

สิ่งที่ต้องการ:

StringBuilder sb = new StringBuilder();
sb.AppendFormat("Foo{0}Bar", Environment.NewLine);
string s = sb.ToString();

หรือ

StringBuilder sb = new StringBuilder();
sb.Append("Foo");
sb.Append("Foo2");
sb.Append(Environment.NewLine);
sb.Append("Bar");
string s = sb.ToString();

หากคุณต้องการขึ้นบรรทัดใหม่หลังจากการต่อท้ายแต่ละครั้งคุณสามารถดูคำตอบของ Ben Voigtได้


2
เป็นไปได้ที่จะผสม Append และ AppendLine เพื่อให้ได้บรรทัดใหม่ตามที่คุณต้องการไม่ใช่หลังจากทุก Append นอกจากนี้ฉันยังเชื่อมโยงกับ AppendLine รุ่นที่ไม่มีอาร์กิวเมนต์ซึ่งต่อท้ายไม่มีอะไรนอกจากลำดับขึ้นบรรทัดใหม่
Ben Voigt

4
Stringbuilder.AppendLine () ทำสิ่งเดียวกับ sb.Append (Environment.NewLine); ฉันจะบอกว่ามันเป็นอะไรที่ดีกว่า ( msdn.microsoft.com/en-us/library/ebk18257.aspx )
Mulki

3
โปรดทราบว่า Environment.NewLine บนระบบยูนิกซ์ไม่ใช่ "\ r \ n" ดังนั้นหากคุณกำลังใช้งานบางอย่างที่ระบุเป็น "\ r \ n" คุณต้องเขียนลงในโค้ดแทนที่จะเรียก AppendLine
hultqvist

1
@hultqvist: ดีกว่าที่จะใช้AppendLineใน StreamWriter แล้วมันจะแทรกที่เหมาะสมขึ้นบรรทัดใหม่ลำดับที่โดยเฉพาะอย่างยิ่งและไม่เพียงStreamWriter Environment.NewLineตัวอย่างเช่นหากคุณเปิดสตรีมที่เชื่อมโยงกับการเชื่อมต่อ SMTP คุณสามารถตั้งค่าNewLineคุณสมบัติเป็น "\ r \ n" จากนั้นคุณจะได้รับการจับมือ SMTP ที่ถูกต้องแม้ใน Unix
Ben Voigt

1
AppendLine ง่ายกว่าวิธีนี้
Antonio Mano




5

ใช้ฟังก์ชันในตัวบรรทัดต่อท้ายของ StringBuilder:

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

เอาต์พุต

First line
Second line
Third line


1

สำหรับหลายบรรทัดวิธีที่ดีที่สุดที่ฉันพบคือทำสิ่งนี้:

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

ด้วยวิธีนี้คุณไม่ต้องเกะกะหน้าจอด้วย Environment NewLine หรือ AppendLine () ซ้ำหลาย ๆ ครั้ง นอกจากนี้ยังมีแนวโน้มที่จะเกิดข้อผิดพลาดน้อยกว่าการจำพิมพ์


1

เพียงสร้างส่วนขยายสำหรับคลาส 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
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.