java:使用StringBuilder在开头插入

我只能用String来做这件事,例如:

String str=""; for(int i=0;i<100;i++){ str=i+str; } 

有没有一种方法来实现这个与StringBuilder? 谢谢。

 StringBuilder sb = new StringBuilder(); for(int i=0;i<100;i++){ sb.insert(0, Integer.toString(i)); } 

警告: 它违背了StringBuilder的目的 ,但它做你所问。


更好的技术 (虽然还不理想):

  1. 反转每个你想插入的string。
  2. 每个string附加到一个StringBuilder
  3. 完成后反转整个 StringBuilder

这将把一个O(n²)解决scheme变成O( n )。

你可以使用strbuilder.insert(0,i);

也许我错过了一些东西,但是你想用一个看起来像这样的string结束"999897969594...543210" ,对吗?

 StringBuilder sb = new StringBuilder(); for(int i=99;i>=0;i--){ sb.append(String.valueOf(i)); } 

作为一种替代解决scheme,您可以使用LIFO结构(比如堆栈)来存储所有的string,当您完成时只需将它们全部取出并放入StringBuilder。 这自然会颠倒放置在其中的项目(string)的顺序。

 Stack<String> textStack = new Stack<String>(); // push the strings to the stack while(!isReadingTextDone()) { String text = readText(); textStack.push(text); } // pop the strings and add to the text builder String builder = new StringBuilder(); while (!textStack.empty()) { builder.append(textStack.pop()); } // get the final string String finalText = builder.toString(); 

这个线程是相当古老的,但你也可以考虑一个recursion的解决scheme,通过StringBuilder来填充。 这可以防止任何逆向处理等。只需要用recursiondevise迭代,并仔细决定退出条件。

 public class Test { public static void main(String[] args) { StringBuilder sb = new StringBuilder(); doRecursive(sb, 100, 0); System.out.println(sb.toString()); } public static void doRecursive(StringBuilder sb, int limit, int index) { if (index < limit) { doRecursive(sb, limit, index + 1); sb.append(Integer.toString(index)); } } }