我正在尝试形成一个初始值为00000的StringBuffer。
我的问题是初始值依赖于整数变量,并且基于整数变量的值,StringBuffer中应该有多个零值。
E.g。 int length = 9,因此我的StringBuffer应该用000000000 ....(9个零)...
形成我无法摆脱这个问题。任何人都可以指导我这个。
我想通过的方法是获取整数值并将多个值存储在String数组中,然后将字符串数组写入StringBuffer,但这似乎是非常低效的方法。请指导我。
答案 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}}