Подтвердить что ты не робот

Java: используйте StringBuilder для вставки в начале

Я мог бы сделать это только с помощью String, например:

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

Есть ли способ добиться этого с помощью StringBuilder? Спасибо.

4b9b3361

Ответ 1

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

Предупреждение: Он побеждает цель StringBuilder, но делает то, что вы просили.


Лучшая техника (хотя и не идеальная):

  • Переверните каждую строку, которую вы хотите вставить.
  • Добавить каждую строку в StringBuilder.
  • Завершите все StringBuilder, когда закончите.

Это превратит решение O (n²) в O (n).

Ответ 2

вы можете использовать strbuilder.insert(0,i);

Ответ 3

Может быть, я что-то упустил, но вы хотите завершить строку String, которая выглядит так: "999897969594...543210", правильно?

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

Ответ 4

В качестве альтернативного решения вы можете использовать структуру 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();

Ответ 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));
        }
    }
}