如何在替换字符串后保持文本文件内容的相同格式



我有一个文本文件,内容为:

love 
test
me
once

我的Java程序将单词"love"替换为"liverpool"。但是文本文件失去了它的格式,变成这样:

Liverpool  test me once 

所有字符串出现在一行。

这是我目前为止写的:

import java.io.*;
public class Replace_Line {
public static void main(String args[]) {
    try {
        File file = new File("C:\Users\Antish\Desktop\Test_File.txt");
        BufferedReader reader = new BufferedReader(new FileReader(file));
        String line = "", oldtext = "";
        while ((line = reader.readLine()) != null) {
            oldtext += line + " ";
        }
        reader.close();
        // replace a word in a file
        // String newtext = oldtext.replaceAll("boy", "Love");
        // To replace a line in a file
        String newtext = oldtext.replaceAll("love", "Liverpool");
        FileWriter writer = new FileWriter(
                "C:\Users\Antish\Desktop\Test_File.txt");
        writer.write(newtext);
        writer.close();
    } catch (IOException ioe) {
        ioe.printStackTrace();
    }
}
}

任何帮助保持文件格式相同,只是替换字符串。由于

当你按行阅读时,你删除了所有的换行符,然后用空格代替它们。

oldtext += line + " ";

必须是

oldtext += line + System.lineSeparator();

当你这样阅读时,你会失去换行符:

while((line = reader.readLine()) != null) {
    oldtext += line + " ";
}
要解决这个问题,应该用 替换循环中的代码。
oldtext += line + "n";

但是请注意,逐行读取文件并将每行与+=连接是非常低效的。在学习Java时可以这样做,但在任何生产代码中都不能这样做。使用StringBuilder或一些外部库来处理IO。

Replace

oldtext += line + " ";

oldtext += line + "n";

注意,这会将新的行字符(可以是r或rn)转换为一个n。还要注意,在循环中使用+操作符进行连接的效率非常低,因为它会产生大量的大型一次性STring实例。你最好使用StringBuilder或StringWriter。

为什么不简单地将整个文件读取为单个String,然后调用replaceAll并重写所有内容。参见Guava方法或commons-io方法

相关内容

  • 没有找到相关文章

最新更新