java:使用StringBuilder在开头插入

use*_*275 81 java string stringbuilder insert append

我只能用String执行此操作,例如:

String str="";
for(int i=0;i<100;i++){
    str=i+str;
}
Run Code Online (Sandbox Code Playgroud)

有没有办法用StringBuilder实现这个目的?谢谢.

Meh*_*dad 167

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

警告: 它违背了目的StringBuilder,但它完成了你的要求.


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

  1. 反转要插入的每个字符串.
  2. 每个字符串附加到a StringBuilder.
  3. 完成后反转整个 StringBuilder过程.

这将打开一个O(ñ ²)溶液到O(Ñ).

  • ...因为它使 `AbstractStringBuilder` 将所有内容移动到插入索引之后,以便为插入的内容找到空间。然而,这是一个实现细节,而不是一个原则。 (2认同)

rat*_*eak 28

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

  • 为什么这个能得到这么多人的喜欢!该类未正确定义 - 只有方法调用的签名! (2认同)

Spe*_*eck 11

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

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

  • @nom-mon-ir 他只是反转字符串。它没有回答如何在左侧追加。 (2认同)

Vas*_*chi 6

作为替代解决方案,您可以使用LIFO结构(如堆栈)来存储所有字符串,并在完成后将它们全部取出并将它们放入StringBuilder中.它自然地反转放置在其中的项目(字符串)的顺序.

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();
Run Code Online (Sandbox Code Playgroud)

  • 应该使用`ArrayDeque`而不是`Stack`."{@link Deque}接口及其实现提供了一套更完整,更一致的LIFO堆栈操作,应该优先使用这个类." (4认同)

Ben*_*min 5

这个线程已经很老了,但你也可以考虑一个递归解决方案,传递 StringBuilder 来填充。这允许防止任何反向处理等。只需要用递归设计你的迭代并仔细决定退出条件。

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));
        }
    }
}
Run Code Online (Sandbox Code Playgroud)