0

初期値が 00000 の StringBuffer を作成しようとしています。

私の問題は、初期値が整数変数に依存し、整数変数の値に基づいて、StringBufferに多数のゼロが存在する必要があることです..

たとえば、int length=9 の場合、StringBuffer は 000000000....(9 個のゼロ)... で形成されます。

私はこの問題から抜け出す方法を得ていません。誰でもこれについて私を案内してもらえますか。

私が考え出した1つの方法は、整数値を取得し、その多くの値をString配列に格納してから、String配列をStringBufferに書き込むことですが、非常に非効率的な方法のようです. 私を案内してください。

4

5 に答える 5

1
int numZeroes = 5;
StringBuilder sb = new StringBuilder();

for (int i = 0; i < numZeroes; i++)
{
    sb.append('0');
}
于 2011-09-09T06:38:15.787 に答える
1

使用できるユーティリティメソッドは次のとおりです。

public StringBuilder repeatChars(StringBuilder sb, char c, int n) {
    for (int i = 0; i < n; ++i) {
        sb.append(c);
    }

    return sb;
}

次のように呼び出します。

StringBuilder sb = new StringBuilder();

// Add nine zeroes
repeatChars(sb, '0', 9);

注:StringBuilderメソッド呼び出しをチェーンできるように、 を返すようにしました。

には不要な同期がないため、StringBuilderの代わりに使用することをお勧めします。StringBufferStringBuilderStringBuffer

これをループで行う以外に効率的な方法はありません。マイクロ最適化についてあまり心配しないでください (単純なステートメントが十分に効率的でないことを心配してください)。

于 2011-09-09T06:38:49.047 に答える
0

答えが遅く、おそらく役に立たないかもしれません、Apache Commons Langを使用していて、多くの重要なJavaプロジェクトが使用している場合はStrBuilder、特にappendPaddingメソッドを使用して必要なものを手に入れることができます。

あなたは書ける:

StrBuilder b = new StrBuilder();
b.appendPadding(9, '0').append(...).append(...)....
于 2011-09-09T06:56:35.317 に答える
0

Java 1.4.2 (またはそれ以前) に行き詰まっている場合や、 を使用する特別な理由がない限りStringBuffer、ほとんどの場合、StringBuilder代わりに a を使用する必要があります。

単純なループの何が問題になっていますか:

StringBuilder buf = new StringBuilder(length); // might want to use more if you know that you'll append something
for (int i = 0; i < length; i++) {
  buf.append('0');
}

また、使用するゼロの最大数がわかっている場合は、次のようにすることができます。

// make sure never to change the content of this
private static final char[] ZEROES = new char[] { '0', '0', '0', '0', '0', '0', '0', '0', '0' };

// when you need the zeroes do this:
StringBuilder buf = new StringBuilder(length);
buf.append(ZEROES, 0, length);
于 2011-09-09T06:39:05.547 に答える
0

1行でそれを行うことができるかどうかはわかりませんが、次を使用できます。

StringBuffer buffer = new StringBuffer(length);
for (int i = 0; i < length; i++)
{
    buffer.append('0');
}

(nullity チェックの必要がなく、長さがわかっているため、 a を追加することは、文字列を追加するよりもわずかに効率的であると思わcharます。ただし、重要ではありません。)

Java 5 以降を使用している場合は、不必要な同期を避けるために、通常は を使用するStringBuilderよりもを使用することをお勧めします。StringBuffer

これは長さを初期容量として使用します。これは、これ以上追加しない場合に適していますが、後でデータを追加する場合は、適切に変更して容量を大きくしてください。

于 2011-09-09T06:39:51.683 に答える