recorrer - java: use StringBuilder para insertar al principio
using stringbuilder java (5)
Tal vez me estoy perdiendo algo pero quieres terminar con una cadena que se ve así, "999897969594...543210"
, ¿correcto?
StringBuilder sb = new StringBuilder();
for(int i=99;i>=0;i--){
sb.append(String.valueOf(i));
}
Solo podría hacer esto con String, por ejemplo:
String str="";
for(int i=0;i<100;i++){
str=i+str;
}
¿Hay alguna manera de lograr esto con StringBuilder? Gracias.
puedes usar strbuilder.insert(0,i);
StringBuilder sb = new StringBuilder();
for(int i=0;i<100;i++){
sb.insert(0, Integer.toString(i));
}
Advertencia: Derrota el propósito de StringBuilder
, pero hace lo que le pediste.
Mejor técnica (aunque aún no es ideal):
- Invierta cada cuerda que quiera insertar.
- Adjunte cada cadena a un
StringBuilder
. - Invierta todo el
StringBuilder
cuando haya terminado.
Esto convertirá una solución de O ( n ²) en O ( n ).
Este hilo es bastante antiguo, pero también podría pensar en una solución recursiva que pase el StringBuilder para rellenar. Esto permite evitar cualquier proceso inverso, etc. Solo necesita diseñar su iteración con una recursión y cuidadosamente decidir por una condición de salida.
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));
}
}
}
Como solución alternativa puede usar una estructura LIFO (como una pila) para almacenar todas las cadenas y, cuando termine, simplemente desgúpelas y colóquelas en StringBuilder. Naturalmente, invierte el orden de los elementos (cadenas) que se colocan en él.
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();