如何将文本文件中的特定行放入数组列表?

时间:2019-05-11 01:09:59

标签: java arraylist text-files

我想使用arraylist从文本文件中获取特定的数据行。 (更多内容:学生详细信息存储在Student.txt中。 如果我必须更新特定的学生,我想将该学生的行从文本文件导入到arraylist中以便对其进行编辑)

Text file looks like this (ID, Name, Degreelevel, Email, Conatctno : courses);

A30, sarah, sarah@gmail.com, +64732 ; Computer Science, Cyber Security, Digital Media
A45,zaha, zaha@gmail.com, +3683: Software Engineering

我的代码将文本文件中的所有数据打印到arraylist中。

try {
    BufferedReader reader = new BufferedReader(new FileReader(file));
    ArrayList<String> lines = new ArrayList<>();
    String line = reader.readLine(); 
    while (line != null)
    {
        lines.add(line);
        line = reader.readLine();
    } 
    reader.close();
    System.out.println(lines);            
}

当前输出:[ID, Name, Degreelevel, Email, Conatctno : courses, A30, sarah, sarah@gmail.com, +64732 ; Computer Science, Cyber Security, Digital Media, A45,zaha, zaha@gmail.com, +3683: Software Engineering]

那么我该如何搜索特定的学生ID,并将该行仅输入到arraylist中。任何提示都会有所帮助。谢谢。

1 个答案:

答案 0 :(得分:0)

您必须遍历每行,直到找到匹配的ID。这就是为什么我们通常喜欢将这类信息存储在数据库中而不是文本文件中的原因之一。

只需添加一个if语句,即可在将其添加到arraylist之前检查您是否获得了正确的行。

一种非常简单的方法是:

String myId = "A30";
while (line != null){
    if(line.startsWith(myId){
        lines.add(line);
        break;
    }
    line = reader.readLine();
} 

通常,在解析文本文件时,可以使用某些数据定界符(例如, line.split(“,”),而不是使用startsWith。 但是,示例中的数据使用冒号,分号和逗号作为定界符,结构却很糟糕。解决字符串包含定界符的问题的一种常见方法是将所有字符串封装在引号中,并将引号中找到的任何特殊字符视为常规字符。 文本文件中数据的半正式结构化格式为csv。大多数语言(包括Java)都具有用于解析csv文件的库。