StringBuilder中的换行符

104

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


19
在任何常见操作系统中,这并不是一个换行符。Windows 使用 \r\n,Mac 使用 \r,Unix 和 Linux 使用 \n。 - Ben Voigt
2
严谨地说,“newline” 总是指 '\n'。在机械式电传打字机中,它是滑轮换行符。而“carriage return” 总是指 '\r'。在电传打字机中,它是回车符。每个操作系统可能会有不同的解释方式。在 Unix/Linux 中,回车符通常不使用,因为这已经不再是一个机械系统了。 - Jay
7
@Jay:只引起卷轴移动的字符不被称为换行符,而是称为换行。 - Ben Voigt
8个回答

136

我会使用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
7
Stringbuilder.AppendLine() 和 sb.Append(Environment.NewLine) 的作用是相同的。我认为前者更加简洁。(http://msdn.microsoft.com/en-us/library/ebk18257.aspx) - Whimsical
3
请注意,在Unix系统上,Environment.NewLine不是"\r\n"。因此,如果您正在实现某个指定为"\r\n"的内容,则必须在代码中编写它,而不是调用AppendLine方法。 - hultqvist
1
@hultqvist:最好在StreamWriter上使用AppendLine,这样它将插入适用于该特定StreamWriter的换行序列,而不仅仅是Environment.NewLine。例如,如果您打开与SMTP连接相关联的流,则可以将其NewLine属性设置为“\r\n”,然后即使在Unix上,您也将获得有效的SMTP握手。 - Ben Voigt
2
AppendLine比这个方法更简单。 - Antonio Mano
显示剩余2条评论

83

如果它有与Append()相同数量的重载,那就太好了。看起来像是一个疏忽。 - user441521

27

13
使用 StringBuilder 的 append line 内置函数:
StringBuilder sb = new StringBuilder();
sb.AppendLine("First line");
sb.AppendLine("Second line");
sb.AppendLine("Third line");

输出

First line
Second line
Third line

6

在Linux中会使用\n,而不是\r\n


我的应用程序正在 Linux 上运行,但我想要它返回 \r\n,目前我正在使用 stringbuilder.AppendLine。 - Mukeem Ahmed

3
StringBuilder sb = new StringBuilder();

您可以使用 sb.AppendLine()sb.Append(Environment.NewLine) 方法;

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接