Ký tự dòng mới trong StringBuilder


88

Làm cách nào để bạn thêm một ký tự dòng (\ n \ r) mới vào StringBuilder?


17
Đó không phải là một dòng mới trong bất kỳ hệ điều hành thông thường nào. Windows là \ r \ n, Mac là \ r, Unix và Linux là \ n.
Ben Voigt

2
'Dòng mới' về mặt bàn đạp luôn là '\ n'. Đó là đặc điểm dịch chuyển trục lăn trong các loại máy viễn thông cơ học. 'ký tự xuống dòng' luôn là '\ r'. Nó là ký tự xuống dòng trong teletypes. Mỗi hệ điều hành có thể giải thích chúng khác nhau. Trong Unix / Linux, trả về thường không được sử dụng vì nó không cần thiết vì nó không còn là một hệ thống cơ học.
Jay

6
@Jay: Một ký tự chỉ gây ra dịch chuyển trục lăn không được gọi là dòng mới, mà là dòng cấp.
Ben Voigt

Câu trả lời:


125

Tôi sẽ sử dụng thuộc tính Environment.NewLine .

Cái gì đó như:

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

Hoặc là

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

Nếu bạn muốn có một dòng mới sau mỗi lần nối, bạn có thể xem câu trả lời của Ben Voigt .


2
Có thể kết hợp Append và AppendLine để có được các dòng mới mà bạn muốn, không phải sau mỗi Append. Ngoài ra, tôi đã liên kết với phiên bản không đối số của AppendLine, phiên bản này không gắn thêm gì ngoài chuỗi dòng mới.
Ben Voigt

4
Stringbuilder.AppendLine () thực hiện tương tự như sb.Append (Environment.NewLine); Tôi sẽ nói nó cũng gọn gàng hơn ( msdn.microsoft.com/en-us/library/ebk18257.aspx )
Mulki

3
Lưu ý rằng Environment.NewLine trên hệ thống unix không phải là "\ r \ n", vì vậy nếu bạn đang triển khai một cái gì đó được chỉ định là "\ r \ n" thì bạn phải viết nó trong mã thay vì gọi AppendLine.
hultqvist

1
@hultqvist: Tốt hơn nên sử dụng AppendLinetrên StreamWriter, sau đó nó sẽ chèn chuỗi dòng mới thích hợp cho cụ thể StreamWritervà không chỉ đơn thuần Environment.NewLine. Ví dụ: nếu bạn mở một luồng liên kết với kết nối SMTP, bạn có thể đặt thuộc tính của nó NewLinethành "\ r \ n" và sau đó bạn sẽ nhận được bắt tay SMTP hợp lệ ngay cả trên Unix.
Ben Voigt

1
AppendLine đơn giản hơn phương pháp này.
Antonio Mano




4

Sử dụng các chức năng tích hợp sẵn dòng nối thêm của StringBuilder:

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

Đầu ra

First line
Second line
Third line

2
StringBuilder sb = new StringBuilder();

Bạn có thể sử dụng sb.AppendLine () hoặc sb.Append (Environment.NewLine) ;


1

Đối với nhiều dòng, cách tốt nhất tôi thấy là làm như sau:

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

Bằng cách này, bạn không phải làm lộn xộn màn hình với Environment.NewLine hoặc AppendLine () lặp lại nhiều lần. Nó cũng sẽ ít bị lỗi hơn so với việc phải nhớ nhập chúng.


1

Chỉ cần tạo một phần mở rộng cho lớp 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
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.