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 ループ全体の連結の間に文字列のすべてのコピーを格納するという問題が回避されます。

編集:

または、これはあなたのために機能しますか(一度に1文字ずつ追加することなく):

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ループの前に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();
于 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

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();
于 2012-05-01T18:52:58.537 に答える