我在第 26 和 27 行有一个问题:
String dumb = input.nextLine();
output.println(dumb.replaceAll(REMOVE, ADD));
我希望我能够将其缩小到一行并能够节省空间,所以我做到了:
output.println(new String(input.nextLine()).replaceAll(REMOVE, ADD));
但现在我想知道性能。我知道这个程序很安静,不需要优化,但我想学习这个。
我看它的方式,在第一个场景中,我正在创建一个哑字符串对象,但是一旦我离开循环,对象就会被放弃,JVM 应该清理它,对吗?但是 JVM 清理废弃对象的速度是否比程序执行循环的速度更快?还是程序完成后会有几个字符串对象等待垃圾回收?
我的逻辑是否正确,在第二种情况下,String对象是动态创建的,一旦程序通过那条线就被销毁?这实际上是性能提升吗?
如果你能帮我解决这个问题,我将不胜感激。
谢谢你,
ps 如果您想知道程序(我假设它是直截了当的)它接收输入文件、输出文件和两个单词,程序获取输入文件,用第二个单词替换第一个单词并将其写入第二个文件。如果您实际上已经阅读了这篇文章,并且想提出一些可以让我的代码变得更好的方法,请这样做。我将不胜感激。
import java.io.File;
import java.util.Scanner;
import java.io.PrintWriter;
public class RW {
public static void main(String[] args) throws Exception{
String INPUT_FILE = args[0];
String OUTPUT_FILE = args[1];
String REMOVE = args[2];
String ADD = args[3];
File ifile = new File(INPUT_FILE);
File ofile = new File(OUTPUT_FILE);
if (ifile.exists() == false) {
System.out.println("the input file does not exists in the current folder");
System.out.println("please provide the input file");
System.exit(0);
}
Scanner input = new Scanner(ifile);
PrintWriter output = new PrintWriter(ofile);
while(input.hasNextLine()) {
String dumb = input.nextLine();
output.println(dumb.replaceAll(REMOVE, ADD));
}
input.close();
output.close();
}
}