String.Split结果出现问题

时间:2018-08-23 21:18:56

标签: c#

我试图从文本文件中加载4行:

email:pass
email1:pass1
email2:pass2
email3:pass3

我使用了string.split,但是当我尝试将其添加到“我的列表”时,加载效果不佳。

这是我尝试过的:

List<string> AccountList = new List<string>();
Console.Write("File Location: ");
string FileLocation = Console.ReadLine();
string[] temp = File.ReadAllLines(FileLocation);
string[] tempNew = new string[1000];

int count = 0;
foreach(var s in temp)
{
    AccountList.Add(s.Split(':').ToString());
    count++;
}

我检查了字符串在列表中的外观,它们是这样的:

System.String[]

我希望它像这样:

AccountList[0] = email
AccountList[1] = pass
AccountList[2] = email1
AccountList[3] = pass1

3 个答案:

答案 0 :(得分:5)

String.Split产生一个字符串数组

foreach(var s in temp)
{
    string[] parts = s.Split(':');
    string email = parts[0];
    string pass = parts[1];
    ...
}

要存储这两条信息,请创建一个帐户class

public class Account
{
    public string EMail { get; set; }
    public string Password { get; set; }
}

然后将您的帐户列表声明为List<Account>

var accountList = new List<Account>();
foreach(var s in File.ReadLines(FileLocation))
{
    string[] parts = s.Split(':');
    var account = new Account { EMail = parts[0], Password = parts[1] };
    accountList.Add(account);
}

请注意,您不需要temp变量。 File.ReadLines在循环进行时读取文件,因此不需要将整个文件存储在内存中。请参阅:File.ReadLines Method(Microsoft文档)。

无需计数。您可以使用

int count = accountList.Count;

此列表比与电子邮件和密码交错的列表更易于处理。

您可以按索引访问帐户

string email = accountList[i].EMail;
string pass = accountList[i].Password;

Account account = accountList[i];
Console.WriteLine($"Account = {account.EMail}, Pwd = {account.Password}");

答案 1 :(得分:1)

根据您的预期结果,您可以尝试一下,string.Split将返回一个字符串数组string[],该字符串数组取决于您的预期字符。

然后使用索引获取字符串部分。

foreach(var s in temp)
{ 
   var arr = s.Split(':');
   AccountList.Add(arr[0]);
   AccountList.Add(arr[1]);
}

答案 2 :(得分:1)

问题是Split返回一个字符串数组,该字符串数组由在分割字符之间找到的字符串部分组成,并且您将其视为字符串。

相反,可以通过获取File.ReadAllLines(字符串数组)的结果并使用.SelectMany选择结果数组来简化代码,方法是将:字符上的每一行分开(因此您要为数组中的每个项目选择一个数组),然后在结果上调用ToList(因为您将其存储在列表中)。

例如:

Console.Write("Enter file location: ");
string fileLocation = Console.ReadLine();

// Ensure the file exists
while (!File.Exists(fileLocation))
{
    Console.Write("File not found, please try again: ");
    fileLocation = Console.ReadLine();
}

// Read all the lines, split on the ':' character, into a list
List<string> accountList = File.ReadAllLines(fileLocation)
    .SelectMany(line => line.Split(':'))
    .ToList();