C# 无法通过换行符将字符串拆分为数组(来自 StreamReader)

Posted

技术标签:

【中文标题】C# 无法通过换行符将字符串拆分为数组(来自 StreamReader)【英文标题】:C# can't split a string into an array by newline (from StreamReader) 【发布时间】:2020-07-06 03:30:06 【问题描述】:
StreamReader login = new StreamReader("C:/Users/Me/Documents/logins.txt");
            string ar = login.ReadToEnd();
            string[] names = ar.Split("\r\n");
login.Close();

我正在从文件中读取一组登录信息,例如“用户名,密码”,然后是“usr,pwd”或其他换行符。我想通过在新行的开头拆分来将 txt 文件拆分为一组数组,但是“\r\n”似乎不起作用,出现错误“无法从字符串转换为字符” .我已经尝试过 Environment.Newline,但这也不起作用,并带有相同的错误消息。

【问题讨论】:

为什么不直接使用File.ReadAllLines呢? 【参考方案1】:

不用处理流,只需使用File.ReadAllLines

string[] names = File.ReadAllLines("C:/Users/Me/Documents/logins.txt");

【讨论】:

谢谢!有人告诉我使用流,但我只是想知道,每个之间有什么区别? 不同之处在于File.ReadAllLines 基本上为您处理打开和关闭流以及读取行。你可以查看实现here【参考方案2】:

String.Split 需要一个数组或 charstring 值来拆分。您需要将代码更改为:

string[] names = ar.Split(new string[]"\r\n", StringSplitOptions.None);

【讨论】:

谢谢!现在工作正常。只是好奇,StringSplitOptions 是做什么的?为什么会有所不同? @EdwardPugh - 用于指定是否获取空行 (None) 或是否应从结果数组中删除空行 (RemoveEmptyEntries)【参考方案3】:

您可以像这样单独阅读每一行:

using (StreamReader reader = new StreamReader(pathToFile)) 
    string line = reader.ReadLine();

这可能更可取,因为您不必依赖行返回类型来正确使用字符

【讨论】:

以上是关于C# 无法通过换行符将字符串拆分为数组(来自 StreamReader)的主要内容,如果未能解决你的问题,请参考以下文章

C# 正则表达式拆分但如果拆分失败则包含空字符串

c#中的字符串拆分返回一个空数组

C#将具有随机空格的字符串拆分为字符串数组[关闭]

C#:如何将多个字符串拆分为二维数组?

如何首先“将字符串拆分为数组”然后“向该数组添加内容”? || C# 控制台应用程序

在正则表达式 c# 中拆分字符串