繁体   English   中英

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

[英]Converting from Integer value to StringBuffer with zeros as the default value

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

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

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

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

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

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

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

这是您可以使用的实用方法:

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了。

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

除非您遇到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);

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

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

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

如果你正在使用Java 5或更高,一般最好使用StringBuilderStringBuffer ,顺便说一下,让你没有不必要的同步。

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

迟到的答案可能没有用,但是如果您使用的是Apache Commons Lang,并且许多重要的Java项目都有,那么您可以使用它们的StrBuilder ,特别是使用appendPadding方法。

你可以写:

StrBuilder b = new StrBuilder();
b.appendPadding(9, '0').append(...).append(...)....

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM