StringBuilder中的换行符


88

如何在中添加新行(\ n \ r)字符StringBuilder


16
在任何常见的操作系统下,这都不是换行符。Windows是\ r \ n,Mac是\ r,Unix和Linux是\ n。
Ben Voigt 2010年

2
通常,“ newline”始终为“ \ n”。这是机械电传打字机的平移特性。“回车”始终为“ \ r”。它是电传打字机的回车符。每个操作系统对它们的解释可能不同。在Unix / Linux中,通常不使用返回值,因为它不再是机械系统,因此它是不必要的。
杰伊,

6
@Jay:仅导致压板移位的字符不称为换行符,而是换行符。
Ben Voigt

Answers:


125

我将利用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
穆尔基

3
请注意,unix系统上的Environment.NewLine不是“ \ r \ n”,因此,如果要实现指定为“ \ r \ n”的内容,则必须在代码中编写它而不是调用AppendLine。
hultqvist 2012年

1
@hultqvist:最好AppendLine在StreamWriter 上使用,然后它将插入适用于该特定字符的换行符序列StreamWriter,而不仅仅是Environment.NewLine。例如,如果打开绑定到SMTP连接的流,则可以将其NewLine属性设置为“ \ r \ n”,即使在Unix上,也可以获得有效的SMTP握手。
Ben Voigt

1
AppendLine比此方法更简单。
安东尼奥·马诺




4

使用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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.