26 行目と 27 行目に質問があります。
String dumb = input.nextLine();
output.println(dumb.replaceAll(REMOVE, ADD));
これを1行に縮小してスペースを節約できることを望んでいたので、次のようにしました。
output.println(new String(input.nextLine()).replaceAll(REMOVE, ADD));
しかし今、私はパフォーマンスについて疑問に思っています。このプログラムが静かな基本であり、最適化が必要ないことは理解していますが、これを学びたいです。
私の見方では、最初のシナリオでは、文字列オブジェクトのダムを作成していますが、ループを離れると、オブジェクトは破棄され、JVM はそれをクリーンアップする必要がありますよね? しかし、JVM は、プログラムがループを通過するよりも速く、放棄されたオブジェクトをクリーンアップしますか? または、プログラムが完了すると、ガベージ コレクションを待機しているいくつかの文字列オブジェクトが存在しますか?
2番目のシナリオでは、プログラムがその行を通過すると、Stringオブジェクトがオンザフライで作成され、破棄されるという私の論理は正しいですか? これは実際にパフォーマンスの向上ですか?
これを解決していただければ幸いです。
ありがとうございました、
psプログラムについて疑問に思っている場合(私はそれが簡単だと思いました)、入力ファイルと出力ファイル、および2つの単語を受け取ります。プログラムは入力ファイルを受け取り、最初の単語を2番目の単語に置き換えて書き込みます2 番目のファイル。実際にここまで読んで、コードを改善する方法を提案したい場合は、そうしてください。とても感謝しています。
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();
}
}