0

我正在尝试形成一个初始值为 00000 的 StringBuffer ..

我的问题是初始值取决于一个整数变量,并且基于整数变量的值,StringBuffer 中应该有许多零。

例如 int length=9,因此我的 StringBuffer 应该以 000000000....(9 个零)...

我没有办法摆脱这个问题。任何人都可以请指导我。

我想出的一种方法是获取整数值并将那么多值存储在字符串数组中,然后将字符串数组写入 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而不是StringBuffer,因为StringBuilder没有不必要的同步StringBuffer

真的没有比使用循环执行此操作更有效的方法了。不要太担心微优化(担心简单的语句不够高效)。

于 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,否则您几乎应该总是使用 aStringBuilder来代替。

一个简单的循环有什么问题:

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

我不确定在一行中有什么可以做的,但你可以使用:

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

(我怀疑附加 achar比附加字符串效率略高,因为不需要进行空值检查并且长度是已知的。但它并不重要。)

如果您使用的是 Java 5 或更高版本,那么通常比使用 更好StringBuilderStringBuffer顺便说一下,这样您就不会进行不必要的同步。

这使用长度作为初始容量,如果您不打算再追加,这很好 - 但是如果您以后要追加数据,请适当地更改它以提供更大的容量。

于 2011-09-09T06:39:51.683 回答