使用零作为默认值从Integer值转换为StringBuffer

时间:2011-09-09 06:35:34

标签: java arrays integer stringbuffer

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

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

E.g。 int length = 9,因此我的StringBuffer应该用000000000 ....(9个零)...

形成

我无法摆脱这个问题。任何人都可以指导我这个。

我想通过的方法是获取整数值并将多个值存储在String数组中,然后将字符串数组写入StringBuffer,但这似乎是非常低效的方法。请指导我。

5 个答案:

答案 0 :(得分:1)

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

for (int i = 0; i < numZeroes; i++)
{
    sb.append('0');
}

答案 1 :(得分: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不必要的同步。

除了使用循环执行此操作之外,没有其他更有效的方法。不要过分担心微观优化(担心简单的陈述不够有效)。

答案 2 :(得分:0)

除非您遇到Java 1.4.2(或更早版本),或者您有非常具体的原因要使用StringBuffer,否则您几乎应该始终使用StringBuilder代替。

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

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);

答案 3 :(得分:0)

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

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

(我怀疑附加char比附加字符串更有效,因为不需要进行无效检查,并且知道长度。虽然它不会很重要。)

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

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

答案 4 :(得分:0)

迟到的答案,可能没有用,但如果你正在使用Apache Commons Lang,而且许多重要的Java项目都有,那么你有StrBuilder所需的内容,尤其是StrBuilder b = new StrBuilder(); b.appendPadding(9, '0').append(...).append(...).... {3}}方法。

你可以写:

{{1}}