0

目前在我的代码中,我在 for 循环中有一些类似于:

bstr = bstr + x.charAt(i) + x.charAt(i>>4) + x.charAt(i>>8);

其中 i 是一个整数和循环变量,x 是一个静态的最终常量字符串。bstr 可以是 KB 的顺序。

谢谢

4

4 回答 4

5

执行此操作的一种有效方法是使用 StringBuilder 连接您的字符串:

StringBuilder builder = new StringBuilder();
for(int i = 0; i < count; i++){
    builder.append(x.charAt(i));
    builder.append(x.charAt(i>>4));
    builder.append(x.charAt(i>>8));
}

return builder.toString();

这种技术避免了在 for 循环的连接之间存储所有字符串副本的问题。

编辑:

或者这对你有用吗(一次不添加一个字符):

StringBuilder builder = new StringBuilder();
for(int i = 0; i < count; i++){
    builder.append(x);
}

return builder.toString();
于 2012-05-01T18:49:45.807 回答
1

在循环之前创建一个StringBuilder并重用它:

StringBuilder sb = new StringBuilder();

while (someCondition) {
    ...
    sb.append(x.charAt(i))
      .append(x.charAt(i >> 4))
      .append(x.charAt(i >> 8));
    ...
}

bstr = sb.toString();
于 2012-05-01T18:49:56.457 回答
0

使用 StringBuilder 并在循环时追加。

StringBuilder sb = new StringBuilder();
sb.append(bstr);
for(int i=0; i < somecondition; i++){
  sb.append(x.charAt(i)).append(x.charAt(i>>4)).append(x.charAt(i>>8));  
}
System.out.println(sb.toString());
于 2012-05-01T18:52:13.333 回答
0

一种选择是使用StringBuilder类。它有一个内部 char 数组,它会将您的内容附加到该数组中,直到您调用该toString方法,此时它会创建一个新String对象。当然,由于它使用一个数组来存储你的字符,它可能会用完空间,此时它会将内容复制到一个新的更大的数组中。您可以通过最初为其提供足够大以容纳最终字符串的容量来避免这种情况。

// Create a new StringBuilder with an initial capacity that is a little larger than the final String
StringBuilder builder = new StringBuilder(estimatedSizeOfFinalString);
int i = 0;
while (loopConditionIsTrue) {
    builder.append(x.charAt(i)).append(x.charAt(i >> 4)).append(x.charAt(i >> 8);
}
String bstr = builder.toString();
于 2012-05-01T18:52:58.537 回答