【问题标题】:Splitting strings using Environment.Newline leaves \n in most array items?使用 Environment.Newline 拆分字符串会在大多数数组项中留下 \n 吗?
【发布时间】:2012-11-06 09:51:35
【问题描述】:

我使用MyString.Split(Environment.Newline.ToCharArray()[0]) 将我的字符串从一个文件拆分为不同的部分。但是,在我这样做之后,数组中的每个项目,除了第一个项目都以 \n 开头?我知道我用换行符分割的方式有点“作弊”,因为没有更好的词,所以如果有更好的方法,请告诉我......

这是文件...

【问题讨论】:

  • 那么您期望的每条记录都在文件的新行上吗?
  • 是的,就像 123 \n 123 \n 123 \n 123
  • 你会在线发布你的输入文件吗?只需前几行就足够了。

标签: c# split newline


【解决方案1】:

如果您想保持使用.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”...谢谢,这有效
【解决方案2】:

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 ... "))
 {

 }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-08-07
    • 1970-01-01
    • 1970-01-01
    • 2019-03-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-07-08
    相关资源
    最近更新 更多