0

我是 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
4

2 回答 2

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);
        }
于 2013-08-18T07:11:53.250 回答
1

你在做什么有点错误。您阅读(“test.txt”)中的每一行,br然后检查它的字符并一遍又一遍地检查相同的内容,搜索一些未知的输入并将其删除

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

就像是:

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 的行

于 2013-08-18T07:13:44.713 回答