C#从文本文件读取并添加到字符串数组

时间:2018-08-25 23:31:52

标签: c#

我需要从文本文件读取并将行添加到数组中,但是存在一个问题。当我在记事本中打开文本文件时,一切看起来都很好

1
2
3

但是,如果我使用记事本++,文本板或任何其他文本编辑器打开,甚至进行复制粘贴,它将看起来像这样

1

2
3


4

代码如下:

using (var reader = new StreamReader(@"C:\Users\username\Desktop\Example\text1.txt".Replace("username", Environment.UserName)))
        {
            // Read the User Regex Format and add it to List
            string[] temp = reader.ReadToEnd().Split('\n');
            foreach (string s in temp)
                RegexFormat.Add(s);
        }

3 个答案:

答案 0 :(得分:2)

文本文件可能包含Windows行尾。尝试使用

string[] temp= reader.ReadToEnd().Split(new[] { "\r\n", "\r", "\n"},StringSplitOptions.None);

说明: 对于文本文件,Unix和Windows使用不同的字符来表示换行符。 Windows使用两个字符,称为回车符(\r)和换行符(\n),而Unix仅使用换行符。您的文本文件可能有些奇怪,并且包含两种格式的行尾。因此,当您在notepad ++中打开它时,带有Windows结尾的行显示为空行。

您的旧程序仅检测到Unix行结尾。通过使用我提供的代码,程序在看到3个行尾中的任何一个时都会对字符串进行拆分:换行,回车或同时出现这两种情况。

答案 1 :(得分:0)

当EOL控制字符不正确时,会发生这种情况。 Windows用回车和换行符表示换行符。 (CRLF)

在Notepad ++中,您可以通过选择以下字符来检查这些字符:

查看>显示符号> [x]显示行尾

验证文件中还有哪些多余的字符或坏字符,然后需要修改脚本来替换或删除这些字符。

答案 2 :(得分:0)

只需跳过空行

using (var reader = ...){
    while(!reader.EndOfStream){
        var line = reader.ReadLine();
        if(!string.IsNullOrWhitespace(line))
            //add line 
    }
}