gpt4 book ai didi

java - "For"循环,逐渐变慢

转载 作者:行者123 更新时间:2023-11-29 09:35:23 25 4
gpt4 key购买 nike

我写了一段代码来显示循环的进度。部分代码:

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个小时。我该如何解决这个问题?

编辑:我解决了这个问题。问题的根源是每次我对一个字符串执行+=操作时,我实际上是在创建一个新的字符串实例,而且它们越来越长。正如您所说,我使用 StringBuilder 解决了这个问题。翻译代码的工作速度至少提高了 1000 倍。感谢所有提供帮助的人。

最佳答案

每次执行 instantBinary+="00000000" 时,您都在重新创建一个新的字符串对象,并将旧的 String 中的所有大量数据复制到其中(这就是 java 的工作原理)
你应该创建一个 StringBuilder 对象并使用 myStringBuilder.append ( "00000000") 最后得到你的字符串,使用 myStringBuilder.toString ()
更多信息here

关于java - "For"循环,逐渐变慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41902466/

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