gpt4 book ai didi

java - 使用 ReplaceAll() 进行询问

转载 作者:行者123 更新时间:2023-12-02 05:58:49 25 4
gpt4 key购买 nike

我想替换 [FileName] 的所有符号至<FileName>在我的文件中。任何想法和线索都欢迎。我是初学者,请耐心等待。

这是我的代码:

public class TextFormatter {

public static void main(String[] args) {
// TODO Auto-generated method stub

TextFormatter tf = new TextFormatter();
File f = new File("D:\\Temp.txt");
try {
tf.replaceInFile(f);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

public void replaceInFile(File file) throws IOException {

File tempFile = File.createTempFile("buffer", ".tmp");
FileWriter fw = new FileWriter(tempFile);

Reader fr = new FileReader(file);
BufferedReader br = new BufferedReader(fr);

while(br.ready()) {
fw.write(br.readLine().replace("[", "<"));
fw.write(br.readLine().replace("]", ">"));
}

fw.close();
br.close();
fr.close();

// Finally replace the original file.
tempFile.renameTo(file);
}
}

我遇到了类似的错误

Exception in thread "main" java.lang.NullPointerException
at TextFormatter.replaceInFile(TextFormatter.java:36)
at TextFormatter.main(TextFormatter.java:19)

第 36 行是

            fw.write(br.readLine().replace("]", ">"));

第 19 行是

tf.replaceInFile(f);

最佳答案

br.readLine() 每次调用时都会读取一行。因此,如果您想在同一行中替换 [],则不应调用 readLine() 两次(并且也不应调用 fw.write() 两次)。

并且 ready() 不是您应该使用的。只需读取每一行,直到 readLine() 返回 null:

String line;
while((line = br.readLine()) != null) {
line = line.replace("[", "<");
line = line.replace("]", ">");
fw.write(line);
}

另外,我猜你想保留行分隔符。因此,您应该将 FileWriter 包装到 PrintWriter 中并使用 println()

最后,无论方法中发生什么,您都应该确保关闭读取器和写入器。使用try-with-resources声明。

关于java - 使用 ReplaceAll() 进行询问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22845391/

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