如何根据学生ID删除特定信息

时间:2013-08-18 07:00:01

标签: java file-processing

我是java的新手,我在根据用户输入的学生ID删除特定数据时遇到问题。 我只能删除学生ID,但不能删除该学生的所有信息。

这是我的代码:

File inputFile = new File("test.txt");
File tempfile = new File("temp.txt");
Scanner scanner = new Scanner("test.txt");
BufferedReader br = new BufferedReader(new FileReader("test.txt"));
PrintWriter wr = new PrintWriter("temp.txt");
String s = null;
String infoToRemove = JOptionPane.showInputDialog(null, "Enter ID to cancel");

while ((s = br.readLine()) != null) {
    for (int i = 0; i < s.length(); i++) {
        if (s.indexOf(infoToRemove) != -1) {
            s = s.replaceAll(infoToRemove, "");
        }
    }
    wr.println(s);
}

wr.close();
br.close();
inputFile.delete();
tempfile.renameTo(inputFile);

预期产出:

在:

jason,100,20,Male,Block 1,Ground Floor

jack,200,20,Male,Block 1,Ground Floor

用户插入ID=100后删除:

jack,200,20,Male,Block 1,Ground Floor

2 个答案:

答案 0 :(得分:1)

而不是:

        while((s = br.readLine()) != null){ 
            for (int i = 0; i < s.length(); i++) {
                if (s.indexOf(infoToRemove) != -1) {
                    s = s.replaceAll(infoToRemove,"");

                }
            }
                wr.println(s);
        }

写道:

        while((s = br.readLine()) != null){ 
             if (s.split(",")[1].containts(infoToRemove)) {
                continue;
             }
             wr.println(s);
        }

答案 1 :(得分:1)

你正在做的事情有点不对劲。你读了br(“test.txt”)中的每一行,然后浏览它的字符,并一遍又一遍地检查同样的东西,搜索一些未知的输入并将其删除

你想要做的是每个循环将当前行写入文件

类似的东西:

while ((s = br.readLine()) != null) {

    if (s.indexOf(infoToRemove) == -1) {
       wr.println(s);
    }
}

但这不是最好的方式。

你想要做的是当你创建文件时,它不会是一个毫无意义的行:

jason,100,20,Male,Block 1,Ground Floor

jack,200,20,Male,Block 1,Ground Floor

你想要,至少对于它的id是清楚的。

之类的东西
jason,id=100,20,Male,Block 1,Ground Floor

jack,id=200,20,Male,Block 1,Ground Floor

所以当你搜索它时,你将能够做到:

while ((s = br.readLine()) != null) {

    if (s.indexOf("id=" +infoToRemove) == -1) {
       wr.println(s);
    }
}

它将是准确的,不会意外删除具有其他ID的行