我需要在. net中将字符串分割为换行符,我所知道的分割字符串的唯一方法是使用split方法。然而,这将不允许我(容易)在换行上分裂,那么最好的方法是什么?


当前回答

根据Guffa的答案,在扩展类中使用:

public static string[] Lines(this string source) {
    return source.Split(new string[] { "\r\n", "\n" }, StringSplitOptions.None);
}

其他回答

我目前在VB中使用这个函数(基于其他答案)。NET:

Private Shared Function SplitLines(text As String) As String()
    Return text.Split({Environment.NewLine, vbCrLf, vbLf}, StringSplitOptions.None)
End Function

它首先尝试在平台本地换行符上进行分割,然后退回到每个可能的换行符。

到目前为止,我只在一个类中需要这个。如果这种情况发生了变化,我可能会将此设置为Public并将其移动到实用程序类,甚至可能将其设置为扩展方法。

下面是如何重新加入队列的方法:

Private Shared Function JoinLines(lines As IEnumerable(Of String)) As String
    Return String.Join(Environment.NewLine, lines)
End Function

从。net 6开始,我们可以使用新的string . replacelineends()方法来规范化跨平台的行结束符,所以现在我发现这是最简单的方法:

var lines = input
  .ReplaceLineEndings()
  .Split(Environment.NewLine, StringSplitOptions.None);

根据Guffa的答案,在扩展类中使用:

public static string[] Lines(this string source) {
    return source.Split(new string[] { "\r\n", "\n" }, StringSplitOptions.None);
}

你应该能够很容易地分割你的字符串,就像这样:

aString.Split(Environment.NewLine.ToCharArray());

要拆分一个字符串,你需要使用一个字符串数组的重载:

string[] lines = theText.Split(
    new string[] { Environment.NewLine },
    StringSplitOptions.None
);

编辑: 如果要处理文本中不同类型的换行符,可以使用匹配多个字符串的功能。这将正确地拆分任意类型的换行,并保留文本中的空行和空格:

string[] lines = theText.Split(
    new string[] { "\r\n", "\r", "\n" },
    StringSplitOptions.None
);