使用Environment.Newline分割字符串会在大多数数组项中保留\n吗?

7
我用MyString.Split(Environment.Newline.ToCharArray()[0])将我的文件中的字符串分成不同的部分。但是,在我这样做之后,数组中除了第一个项目外,每个项目都以\n开头?我知道我通过换行符进行拆分方式有点"取巧",如果有更好的方法,请告诉我...
这就是文件... enter image description here

那么,您期望的每个记录都在文件的新行上吗? - Jared
是的,就像123 \n 123 \n 123 \n 123。 - Oztaco
1
你能把你的输入文件放在网上吗?只需要前几行就可以了。 - Dante May Code
2个回答

14

如果您想继续使用.Split()而不是逐行读取文件,则可以执行以下操作...

var splitResult = MyString.Split( new string[]{ System.Environment.NewLine },
    System.StringSplitOptions.RemoveEmptyEntries  );
    /* or System.StringSplitOptions.None if you want empty results as well */

编辑:

你遇到的问题是在非Unix环境中,换行符“字符”实际上是两个字符。因此当您获取零索引时,实际上是在回车符上分割而不是换行符(\n)。

Windows = "\r\n"

Unix = "\n"

根据http://msdn.microsoft.com/en-us/library/system.environment.newline.aspx


我想知道为什么是"\r\n"而不是"\n"……谢谢,这个有效。 - Oztaco

1
在 Windows 中,换行符是两个字符(\r 和 \n)。表达式 Environment.Newline.ToCharArray()[0] 仅指定其中一个字符:\r。因此,另一个字符 (\n) 仍然作为分割字符串的一部分。
我建议您使用以下方式读取文件:
public IEnumerable<string> ReadFile(string filePath)
{
   using (StreamReader rdr = new StreamReader(filePath))
   {
       string line;
       while ( (line = reader.ReadLine()) != null)
       {
          yield return line;
       }
   }
}

你可能需要更多的错误处理,或者指定不同的文件打开选项,或者将流传递给方法而不是路径,但使用迭代器遍历ReadLine()方法的想法是正确的。结果是你可以像这样使用代码:

 foreach (string line in ReadLine(" ... my file path ... "))
 {

 }

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