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