【发布时间】:2017-02-27 13:14:36
【问题描述】:
第一次发帖,请原谅我的格式... 我有一个使用 File.ReadLines() 读取并按顺序存储到列表中的文本文件。 然后我想找到以“Student”开头的字符串的第一个实例。然后我想获取列表中的所有字符串,直到下一个以“Student”开头的字符串实例并在它之前停止。将这些字符串复制到子列表中,然后冲洗并重复,直到到达文件末尾。
文本文件示例:
第 1 行的东西
第 2 行的东西
学生...:乔·史密斯
ID...:12345
主修...:数学
不知道还有多少行
学生...:简·史密斯
ID...:54321
专业...:护理
更多行
学生...:John Doe
ID...:11223
专业:解剖学
更多行。
我希望每个学生的行列表如下所示:
学生 1
学生...:乔·史密斯
ID...:12345
主修...:数学
不知道还有多少行
学生 2
学生...:简·史密斯
ID...:54321
专业...:护理
更多行
我使用了一个 foreach 来迭代这些行。每行都添加到一个新列表中。当我找到一个以“Student”开头的字符串时,我会创建一个新的学生对象并将这些行存储在子列表中。然后我清除子列表,然后继续 foreach,创建新的学生对象。
当前问题
我想念最后一个学生。我知道我可以使用 if 语句来检查当前行是否以“Student”开头,包括检查当前行是否是列表中的最后一行,但我觉得必须有更好/更快的方法来做到这一点。
我必须添加 && lines.Count > 3,因为在“Student”的第一个实例之前有几行我想跳过。
Linq 示例将不胜感激。
List<Student> students = new List<Student>();
List<string> lines = File.ReadLines(args[0]).ToList();
List<string> student_lines = new List<string>();
foreach(string line in lines)
{
if(line.StartsWith("Student...", StringComparison.OrdinalIgnoreCase) && lines.Count > 3)
{
students.Add(new Student(student_lines));
student_lines.Clear();
}
lines.Add(line)
}
【问题讨论】:
-
更容易
File.ReadAllText,在“学生”上拆分,并按\r\n拆分部分 -
你能详细说明一下“学生”的分裂吗?