現在、私のコードでは、次のようなforループに何かがあります。
bstr = bstr + x.charAt(i) + x.charAt(i>>4) + x.charAt(i>>8);
ここで、iは整数でループ変数、xは静的な最終定数文字列です。bstrはKBの順序である可能性があります。
ありがとう
現在、私のコードでは、次のようなforループに何かがあります。
bstr = bstr + x.charAt(i) + x.charAt(i>>4) + x.charAt(i>>8);
ここで、iは整数でループ変数、xは静的な最終定数文字列です。bstrはKBの順序である可能性があります。
ありがとう
これを行う効率的な方法は、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 ループ全体の連結の間に文字列のすべてのコピーを格納するという問題が回避されます。
編集:
または、これはあなたのために機能しますか(一度に1文字ずつ追加することなく):
StringBuilder builder = new StringBuilder();
for(int i = 0; i < count; i++){
builder.append(x);
}
return builder.toString();
StringBuilder
ループの前にa を作成して再利用します。
StringBuilder sb = new StringBuilder();
while (someCondition) {
...
sb.append(x.charAt(i))
.append(x.charAt(i >> 4))
.append(x.charAt(i >> 8));
...
}
bstr = sb.toString();
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());
1つのオプションは、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();