我曾经MyString.Split(Environment.Newline.ToCharArray()[0])
将我的字符串从一个文件拆分成不同的部分。但是,在我这样做之后,数组中的每个项目,除了第一个项目都以 \n 开头?我知道我用换行符分割的方式有点“作弊”,因为没有更好的词,所以如果有更好的方法,请告诉我......
这是文件...
如果您想保持使用.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)。
窗口 = "\r\n"
Unix = "\n"
根据http://msdn.microsoft.com/en-us/library/system.environment.newline.aspx
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 ... "))
{
}