2011-09-09 63 views
0

我试图形成一个StringBuffer为00000的初始值..从整数值转换为StringBuffer的用零作为默认值

我的问题是初始值是依赖于一个整数变量并根据在StringBuffer中应该有许多零的整数变量的值..

Eg int length = 9,因此我的StringBuffer应该与000000000 ....(9个零)...

我没有找到解决这个问题的方法。任何人都可以请指导我这一点。

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

+0

一种方法是用一个指数作为整数变量的值,运行一个循环,并在每个循环中的StringBuffer ....任何其他方式出这个问题的追加0。 .. ??? – AngelsandDemons

+0

http://download.oracle.com/javase/1.5.0/docs/api/java/util/Formatter.html#format(java.lang.String,java.lang.Object ...) – NullUserException

回答

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

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

追加一个字符'0'比字符串“0”更有效。 – Jesper

+0

够正确。这很晚了,我应该在床上:) –

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所具有的不必要的同步。

真的没有其他更有效的方法比用循环做这件事。不要太担心微观优化(担心简单的陈述效率不够高)。

+0

好吧,我在我的帖子提及相同的逻辑几秒钟后评论我的问题....感谢您的帮助......! – AngelsandDemons

+0

失去了一个很好的机会使用“去”操作符,'while(n - > 0)':-D – corsiKa

+0

@glowcoder“去”操作符?你是认真的吗?这在Java中不存在。 – Jesper

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

以及我知道零依赖于整数变量的数量,但我当然不想使用任何数组........我想通了。/ ..它可以很容易地使用循环.... – AngelsandDemons

+0

感谢您的帮助......! – AngelsandDemons

0

我不知道有什么事,做到在一个单一的线,但可以使用:

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

(我怀疑附加一个char稍微比追加一个字符串更有效,因为不需要进行无效性检查并且长度已知。尽管如此,它并不重要。)

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

这将使用长度作为初始容量,如果您不打算追加更多内容,那么这很有用 - 但如果您之后要追加数据,请适当更改以提供更大的容量。

+0

Yups ...我现在使用StringBuilder ........并感谢您的回复... – AngelsandDemons

0

晚的答案,可能没有什么用处,但是如果使用Apache Commons Lang中,许多显著Java项目做,你有你想要的东西与他们的StrBuilder,特别是其appendPadding方法。

你可以写:

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