Sal*_*can 1 java performance for-loop
我写了一个代码来显示循环的进度.部分代码:
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) + "\""):
}
Run Code Online (Sandbox Code Playgroud)
事实上,翻译代码并不短.有128个字符.但那不是问题.我最近尝试翻译300页的文字.它在5分钟内达到了25%.但是花了3个小时达到100%.我该如何解决这个问题?
编辑:我解决了这个问题.问题的根源是每次我对字符串执行+ =操作时,实际上我创建了一个新的字符串实例,并且它们越来越长.正如你所说,我使用StringBuilder解决了这个问题.翻译代码的工作速度至少快1000倍.感谢所有帮助过的人.
您正在内存中创建翻译.循环运行的时间越长,您需要的内存就越多.
使用正文所需的正确大小对其进行初始化(快速查看代码会告诉我它是原始文本大小的常量因素.
StringBuilder instantBinary = new StringBuilder (text.length()*7);
Run Code Online (Sandbox Code Playgroud)打开字符,而不是字符串
switch(Text.charAt(i)){
case '1': instantBinary.append("0000000"); break;
Run Code Online (Sandbox Code Playgroud)不要在记忆中这样做.从一个文件读取,即时将转换写入输出文件.