我遇到了删除旧文本行并将其替换为新文本行的问题。然后最终将其存储在文本文件中。新行不是删除旧行,而是与旧文本一起写入,这违背了函数的用途。例如,如果我的data.txt文件包含“我是一个诗人”,我想用“我实际上是一个哲学家”来替换这个句子。第一个与后者连接而不是被删除。任何帮助,将不胜感激。
public static void removedata(String s) throws IOException {
File f = new File("data.txt");
File f1 = new File("data2.txt");
BufferedReader input = new BufferedReader(new InputStreamReader(
System.in));
// String s = "test";
BufferedReader br = new BufferedReader(new FileReader(f));
PrintWriter pr = new PrintWriter(f1);
String line;
while ((line = br.readLine()) != null) {
if (line.contains(s)) {
System.out.println(line + " is found already");
System.out.println("would you like to rewrite new data?");
String go = input.readLine();
if (go.equals("yes")) {
System.out.println("Enter new Text :");
String newText = input.readLine();
line = line.replace(s, newText);
}
}
pr.println(line);
}
br.close();
pr.close();
input.close();
Files.move(f1.toPath(), f.toPath(), StandardCopyOption.REPLACE_EXISTING);
}
答案 0 :(得分:0)
这对评论来说有点大。
如果我从i am a poet
的data.txt开始并调用removedata("i am");
然后运行程序并输入she is
作为新文本,则最终data.txt为{{1 }}。这是按设计工作的 - 只有段she is a poet
被i am
替换,因为这是String.replace的工作方式。获取您所描述的行为的唯一方法是输入she is
作为新文本,这将导致i am actually a philosopher
的最终data.txt。如果要用用户指定的新文本替换整行,只需更改行:
i am actually a philosopher a poet
为:
line = line.replace(s, newText);
否则,这似乎按预期工作。