ループの進行状況を示すコードを書きました。コードの一部:"For"ループ、徐々に減速する
String instantBinary = "";
for (int i = 0; i < Text.length(); i++) {
//Sometimes the text is too long
if (Text.length() > 100) {
if (Text.length() % (Text.length()/100) == i % (Text.length()/100)) {
WTProgress = "Translate Progress.. %" + (i * 100/Text.length());
System.out.println(WTProgress);
}
}
switch("" + Text.charAt(i)) {
case "1":
instantBinary += "0000000";
break;
case "2":
instantBinary += "0000001";
break;
case "3":
instantBinary += "0000010";
break;
case "4":
instantBinary += "0000011";
break;
case "5":
instantBinary += "0000100";
break;
case "6":
instantBinary += "0000101";
break;
case "7":
instantBinary += "0000110";
break;
case "8":
instantBinary += "0000111";
break;
case "9":
instantBinary += "0001000";
break;
default:
System.out.println("Unknown character found \"" + Text.charAt(i) + "\""):
}
実際、翻訳コードはそれほど短くはありません。 128文字です。しかし、それは問題ではありません。私は最近、300ページのテキストを翻訳しようとしました。 5分で25%に達しました。しかし、100%に達するまでに3時間かかりました。この問題をどうやって解決するのですか?
EDIT:問題を解決しました。問題の原因は、文字列に対して+ =演算を実行するたびに、実際には新しい文字列インスタンスを作成するたびに発生し、長くなったり長くなったりします。あなたが言ったように、私はStringBuilderを使用して問題を解決しました。翻訳コードは少なくとも1000倍高速に動作します。助けてくれた皆様に感謝します。あなたはStringBuilder
オブジェクトを作成する必要があります
もしスピードを上げたいなら...他の人が示唆しているようにStringBuilderを使うことができますが、処理したいデータ量が非常に大きいので、ExecutorServiceを使ってワークロードを共有し、ケアビジネス。 – DevilsHnd