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

时间:2012-11-18 04:23:42

标签: c# split newline

我使用MyString.Split(Environment.Newline.ToCharArray()[0])将我的字符串从文件拆分成不同的部分。但是,除了第一个项目之外,数组中的每个项目都以\ n \ n在我这样做之后开始?我知道由于缺乏一个更好的词,我被新行分裂的方式有点“欺骗”,所以如果有更好的方法,请告诉我......

这是文件...... enter image description here

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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 ... "))
 {

 }