我有一个包含内容的文本文件:
love
test
me
once
我的Java程序用“利物浦”取代了“爱”这个词。但是文本文件丢失了它的格式并且变成这样:
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();
}
}
}
保持文件格式相同并只替换字符串的任何帮助。 感谢
答案 0 :(得分:1)
你这边读完就会丢失换行符:
while((line = reader.readLine()) != null) {
oldtext += line + " ";
}
要修复它,您应该用
替换循环内的代码oldtext += line + "\n";
但要注意这样一个事实,即逐行读取文件并将每行与+=
连接起来是非常低效的。学习Java时可以这样做,但从不在任何生产代码中。使用StringBuilder
或一些外部库来处理IO。
答案 1 :(得分:1)
当您按行读取时,您将删除所有换行符,然后用空格替换它们。
oldtext += line + " ";
需要
oldtext += line + System.lineSeparator();
答案 2 :(得分:0)
替换
oldtext += line + " ";
通过
oldtext += line + "\n";
请注意,这将通过\ n转换新行字符(可能是\ r或\ r \ n)。还要注意,在循环中使用+运算符连接是非常低效的,因为它会产生大量的大量丢弃STring实例。你最好使用StringBuilder或StringWriter。
为什么不简单地将整个文件作为单个String读取,然后调用replaceAll并重写所有内容。请参阅Guava's method或commons-io method