我是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
答案 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的行