目前在我的代码中,我在for循环中有类似于:
的东西bstr = bstr + x.charAt(i) + x.charAt(i>>4) + x.charAt(i>>8);
其中i是整数,循环变量和x是静态最终常量字符串。 bstr可以是KB的顺序。
由于
答案 0 :(得分: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();
答案 1 :(得分: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();
答案 2 :(得分: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());
答案 3 :(得分:0)
一种选择是使用StringBuilder
类。它有一个char的内部数组,它会将你的内容附加到你调用toString
方法,然后它会创建一个新的String
对象。当然,由于它使用数组来存储你的角色,它可能会用完空间,此时它会将内容复制到一个新的更大的数组中。你可以通过最初给它一个足够大的容量来保存最终的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();