gpt4 book ai didi

Java代码优化,替换文件中的所有字符

转载 作者:行者123 更新时间:2023-12-03 17:09:45 25 4
gpt4 key购买 nike

我试过这样做:

import java.io.*;

public class ConvertChar {
public static void main(String args[]) {
Long now = System.nanoTime();
String nomCompletFichier = "C:\\Users\\aahamed\\Desktop\\test\\test.xml";
Convert(nomCompletFichier);
Long inter = System.nanoTime() - now;
System.out.println(inter);
}

public static void Convert(String nomCompletFichier) {
FileWriter writer = null;
BufferedReader reader = null;
try {
File file = new File(nomCompletFichier);
reader = new BufferedReader(new FileReader(file));

String oldtext = "";
while (reader.ready()) {
oldtext += reader.readLine() + "\n";
}
reader.close();
// replace a word in a file
// String newtext = oldtext.replaceAll("drink", "Love");

// To replace a line in a file
String newtext = oldtext.replaceAll("&(?!amp;)", "&");

writer = new FileWriter(file);
writer.write(newtext);
writer.close();

} catch (IOException ioe) {
ioe.printStackTrace();
}
}

}

但是上面的代码比创建两个不同的文件需要更多的时间来执行:

import java.io.*;

public class ConvertChar {
public static void main(String args[]) {
Long now = System.nanoTime();
String nomCompletFichier = "C:\\Users\\aahamed\\Desktop\\test\\test.xml";
Convert(nomCompletFichier);
Long inter = System.nanoTime() - now;
System.out.println(inter);
}

private static void Convert(String nomCompletFichier) {

BufferedReader br = null;
BufferedWriter bw = null;

try {
File file = new File(nomCompletFichier);
File tempFile = File.createTempFile("buffer", ".tmp");

bw = new BufferedWriter(new FileWriter(tempFile, true));
br = new BufferedReader(new FileReader(file));

while (br.ready()) {
bw.write(br.readLine().replaceAll("&(?!amp;)", "&") + "\n");
}

bw.close();
br.close();

file.delete();
tempFile.renameTo(file);

} catch (IOException e) {
// writeLog("Erreur lors de la conversion des caractères : " + e.getMessage(), 0);
} finally {
try {
bw.close();
} catch (Exception ignore) {
}
try {
br.close();
} catch (Exception ignore) {
}
}
}

}

有没有办法在不创建临时文件和减少执行时间的情况下执行第二个代码?我正在进行代码优化。

最佳答案

您的第一个程序运行缓慢的主要原因可能是它正在逐步构建字符串 oldtext。这样做的问题是,每次您向其中添加另一行时,它都可能需要复制一份。由于每次复制所花费的时间与所复制字符串的长度大致成正比,因此您的执行时间将按输入文件大小的平方比例缩放。

您可以通过尝试使用不同长度的文件并查看运行时间如何取决于文件大小来检查这是否是您的问题。

如果是这样,解决该问题的一种简单方法是 Java 的 StringBuilder class这正是用于此任务:逐步构建一个大字符串。

关于Java代码优化,替换文件中的所有字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36913804/

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