gpt4 book ai didi

java - 试图从 CSV 文件中删除一行,我的代码删除了一行和下一行的一半

转载 作者:行者123 更新时间:2023-11-30 07:41:52 26 4
gpt4 key购买 nike

您好,我需要能够删除 CSV 文件中的一行。我的代码当前删除一行,直到下一行的第一个逗号。

我试过更改扫描仪定界符,但我无法让它按我需要的方式工作。

public void deleteRecord() { 
String filePath = "marks.txt";
System.out.println("Enter the StudentID of the record you wish to delete: ");
Scanner in = new Scanner(System.in);
String removeTerm = in.nextLine();
String tempFile = "temp.txt";
File oldFile = new File(filePath);
File newFile = new File(tempFile);

try {
FileWriter fw = new FileWriter(tempFile,true);
BufferedWriter bw = new BufferedWriter(fw);
PrintWriter pw = new PrintWriter(bw);
Scanner scan = new Scanner(oldFile);
scan.useDelimiter("[,]");

while (scan.hasNext()) {
String ID = scan.next();
String Mark = scan.next();
if (!ID.equals(removeTerm)) {
pw.println(ID + "," + Mark);
}
}
scan.close();
pw.flush();
pw.close();
oldFile.delete();
File dump = new File(filePath);
newFile.renameTo(dump);
System.out.println("Record successfully deleted.");

} catch(IOException e) {
System.out.println("Error has occured.");

}
}
B00987,58
B00567,43
B00343,59
B00653,25
B00757,31
B00876,40
B00421,62
B00568,78
B00826,79
B00126,93
B00862,62
B00999,12
B00237,68
B00762,85
B00864,49

这是删除一行之前的文件。我会尝试删除第一行。

43
B00343,59
B00653
25
B00757,31
B00876
40
B00421,62
B00568
78
B00826,79
B00126
93
B00862,62
B00999
12
B00237,68
B00762
85
B00864,49

事情是这样的。

我需要它看起来像这样。

B00567,43
B00343,59
B00653,25
B00757,31
B00876,40
B00421,62
B00568,78
B00826,79
B00126,93
B00862,62
B00999,12
B00237,68
B00762,85
B00864,49

有人可以帮我解决这个问题吗?

最佳答案

尽管您扫描了 2 次以获得 ID 和标记,但您的输入文件每条记录仅包含 1 个逗号。所以第一次扫描会给你 ID 'B00987' 和标记 '58B00567'.

您可以使用扫描器并像这样添加多个分隔符:

s.useDelimiter(",|\\n");

这样扫描器会扫描到逗号和新行。

虽然我不经常使用扫描仪,但在您的情况下我什至更愿意使用 BufferedReader:

  public void deleteRecord() { 
String filePath = "marks.txt";
System.out.println("Enter the StudentID of the record you wish to delete: ");
Scanner in = new Scanner(System.in);
String removeTerm = in.nextLine();
String tempFile = "temp.txt";
File oldFile = new File(filePath);
File newFile = new File(tempFile);

try {
FileWriter fw = new FileWriter(tempFile,true);
BufferedWriter bw = new BufferedWriter(fw);
PrintWriter pw = new PrintWriter(bw);
BufferedReader reader = new BufferedReader(new FileReader(oldFile);

String line = "";
while((line = reader.readLine()) != null) {
if(!line.startsWith(removeTerm)) {
pw.println(line);
}
}
reader.close();
pw.flush();
pw.close();
oldFile.delete();
File dump = new File(filePath);
newFile.renameTo(dump);
System.out.println("Record successfully deleted.");

} catch(IOException e) {
System.out.println("Error has occured.");

}
}

同时使用自动关闭或至少适本地管理资源将是一个很好的优化。

关于java - 试图从 CSV 文件中删除一行,我的代码删除了一行和下一行的一半,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55535903/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com