我需要在. net中将字符串分割为换行符,我所知道的分割字符串的唯一方法是使用split方法。然而,这将不允许我(容易)在换行上分裂,那么最好的方法是什么?
当前回答
using System.IO;
string textToSplit;
if (textToSplit != null)
{
List<string> lines = new List<string>();
using (StringReader reader = new StringReader(textToSplit))
{
for (string line = reader.ReadLine(); line != null; line = reader.ReadLine())
{
lines.Add(line);
}
}
}
其他回答
你应该能够很容易地分割你的字符串,就像这样:
aString.Split(Environment.NewLine.ToCharArray());
愚蠢的回答:写到一个临时文件,这样你就可以使用可敬的 文件。readline
var s = "Hello\r\nWorld";
var path = Path.GetTempFileName();
using (var writer = new StreamWriter(path))
{
writer.Write(s);
}
var lines = File.ReadLines(path);
根据Guffa的答案,在扩展类中使用:
public static string[] Lines(this string source) {
return source.Split(new string[] { "\r\n", "\n" }, StringSplitOptions.None);
}
对于字符串变量s:
s.Split(new string[]{Environment.NewLine},StringSplitOptions.None)
这使用了您的环境对行结束符的定义。在Windows上,行结束符是CR-LF(回车,换行)或c#的转义字符\r\n。
这是一个可靠的解决方案,因为如果您用String重新组合这些行。Join,这等于你原来的字符串:
var lines = s.Split(new string[]{Environment.NewLine},StringSplitOptions.None);
var reconstituted = String.Join(Environment.NewLine,lines);
Debug.Assert(s==reconstituted);
不要做什么:
使用StringSplitOptions。RemoveEmptyEntries,因为这将破坏Markdown等标记,其中空行具有语法目的。 在分隔符上拆分新char[]{环境。因为在Windows上,这将为每一行创建一个空字符串元素。
其实很简单。
VB。NET:
Private Function SplitOnNewLine(input as String) As String
Return input.Split(Environment.NewLine)
End Function
C#:
string splitOnNewLine(string input)
{
return input.split(environment.newline);
}