[英]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或更高,一般最好使用StringBuilder
比StringBuffer
,顺便说一下,让你没有不必要的同步。
这使用长度作为初始容量,如果您不再追加,这是好的 - 但是如果您之后要附加数据,则适当地更改它以提供更大的容量。
迟到的答案可能没有用,但是如果您使用的是Apache Commons Lang,并且许多重要的Java项目都有,那么您可以使用它们的StrBuilder
,特别是使用appendPadding方法。
你可以写:
StrBuilder b = new StrBuilder();
b.appendPadding(9, '0').append(...).append(...)....
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.