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

标签 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

最佳答案

你的做法有点不对。您阅读 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 的行

关于java - 如何根据学生ID删除特定信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18296549/

相关文章:

java - 反转链表队列时遇到问题

Java 图形不起作用?

Perl - 未知的行尾字符

python:文本文件处理,for循环和read操作冲突

perl - 需要删除整行,除了匹配的字符串

java - 使用 Grids java 格式化 JTable

java - 部署时间 list

java - <上下文:property-placeholder> erroer in myservelet-servelet. xml

c - 将具有不同数据类型的文本文件放入结构数组

Python-文件处理-内存错误-加快性能