如何将\r\n
的字符串转换为行?
例如,取这个字符串:
string source = "hello \r\n this is a test \r\n tested";
如何将其转换为:
string[] lines ;
//lines[0] = hello;
//lines[1] = this is a test;
//lines[2] = tested ;
答案 0 :(得分:3)
像这样使用String.Split Method (String[], StringSplitOptions):
var lines = source.Split(new [] { "\r\n", "\n" }, StringSplitOptions.None);
无论源代码是使用Windows linebreak \r\n
还是Unix \n
编写,都可以使用。
正如其他答案所提到的,您可以使用StringSplitOptions.RemoveEmptyEntries
代替StringSplitOptions.None
,正如名称所示,它会删除空字符串(" "
不符合空白条件,仅{{1} }}一样)。
答案 1 :(得分:1)
除了提到的string.Split之外,你还可以使用Regex.Split,但它对于更复杂的分割模式通常更有用。
var lines = Regex.Split( source, @"\r\n" );
答案 2 :(得分:0)
尝试
string[] items = source.Split(new string[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries);
答案 3 :(得分:0)
string text = "Hello \r\n this is a test \r\n tested";
string[] lines = text.Split(new string[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries);
foreach (string line in lines) {
System.Diagnostics.Debug.WriteLine(line);
}
您可以使用overloads of System.String.Split使用单个字符,字符数组或字符串值数组作为拆分字符串的分隔符。 StringSplitOptions指定是否保留空行或删除它们。 (例如,如果要分割多行文本(例如段落),则会保留它们,但会在名称列表的示例中将其删除)
答案 4 :(得分:0)
为清楚起见,我做了另一个答案。
我已经制作了这两种扩展方法:
ReadLines
将允许您在不将整个字符串解析为数组的情况下读取一行。
ReadAllLines
会将整行解析为数组。
在您的情况下,您可以使用它:
var lines = source.ReadAllLines();
我从File.ReadLines
和File.ReadAllLines
获取了名称,因此它们应与.Net框架的其余部分保持一致。
作为对我的其他答案的评论的旁注,我已经检查了StringReader.ReadLine
的代码,这确实照顾了\r\n
和\n
- 但不是旧的旧版Mac Os等(不应该重要)。
public static class StringExtensions
{
public static IEnumerable<string> ReadLines(this string data)
{
using (var sr = new StringReader(data))
{
string line;
while ((line = sr.ReadLine()) != null)
yield return line;
}
}
public static string[] ReadAllLines(this string data)
{
var res = new List<string>();
using (var sr = new StringReader(data))
{
string line;
while ((line = sr.ReadLine()) != null)
res.Add(line);
}
return res.ToArray();
}
}
(ReadAllLines
本可以用ReadLines.ToArray
制作,但我认为额外的几行代码比包裹IEnumerable
更好,这需要一些处理时间)