Pregunta

Estoy usando StringBuffer en Java para unir cadenas juntas, de esta manera:

StringBuffer str = new StringBuffer();

str.append("string value");

Me gustaría saber si hay un método (aunque no encontré nada en un vistazo a la documentación) o alguna otra forma de agregar " relleno " ;.

Déjame explicarte; Cada vez que agrego algo a la cadena, quiero agregar un espacio al final, de esta manera:

String foo = "string value";
str.append(foo + " ");

y tengo varias llamadas para anexar ... y cada vez, quiero agregar un espacio. ¿Hay alguna forma de configurar el objeto para que agregue un espacio automáticamente después de cada anexo?

EDITAR -

String input
StringBuffer query = new StringBuffer();
Scanner scanner = new Scanner(System.in);
scanner.UseDelimiter("\n");

do {
   System.out.println("sql> ");

   input = scanner.next();

   if (!empty(input)) query.append(input);

   if (query.toString().trim().endsWith(";")) {
         //run query
   }
}
while (!input.equalsIgnoreCase("exit");

Usaré StringBuilder como sugirió grom, pero así es como se ve el código ahora mismo

¿Fue útil?

Solución

Creo que esto se maneja más fácilmente con un método auxiliar (código no probado):

public String myMethod() {
    StringBuilder sb = new StringBuilder();
    addToBuffer(sb, "Hello").addToBuffer("there,");
    addToBuffer(sb, "it").addToBuffer(sb, "works");
}

private StringBuilder addToBuffer(StringBuilder sb, String what) {
    return sb.append(what).append(' ');  // char is even faster here! ;)
}

O incluso usando un patrón de Builder con una interfaz fluida (también código no probado):

public String myMethod() {
    SBBuilder builder = new SBBuilder()
        .add("Hello").add("there")
        .add("it", "works", "just", "fine!");

    for (int i = 0; i < 10; i++) {
        builder.add("adding").add(String.valueOf(i));
    }

    System.out.println(builder.build());
}

public static class SBBuilder {
    private StringBuilder sb = new StringBuilder();

    public SBBuilder add(String... parts) {
        for (String p : parts) {
            sb.append(p).append(' '); // char is even faster here! ;)
        }
        return this;
    }

    public String build() {
        return sb.toString();
    }
}

Aquí hay un artículo sobre el tema.

Espero que ayude! :)

Otros consejos

Debería usar StringBuilder .

  

Siempre que sea posible, se recomienda que esta clase se use con preferencia a StringBuffer, ya que será más rápida en la mayoría de las implementaciones.

StringBuffer es final. No puedes derivar de ello. La mejor solución es agregar el relleno para usted. Escribe un método para ello y utiliza una constante de PADDING para que puedas cambiarlo fácilmente, o mejor ponerlo en un parámetro.

¿No puedes crear una nueva clase que se ajuste al StringBuffer y agregar un appendWithTrailingSpace () ?

CustomStringBuffer str = new CustomStringBuffer();
str.appendWithTrailingSpace("string value");

(Aunque es posible que desee llamar a su método algo más corto).

Simplemente agregue el espacio usted mismo, es bastante fácil, según su propio ejemplo.

Otra posibilidad es que los objetos StringBuilder se devuelvan a sí mismos cuando se llama anexar, lo que significa que puede hacer:

str.append("string value").append(" ");

No es tan hábil, pero probablemente sea una solución más fácil que la + " " método.

Otra posibilidad es crear una clase de envoltorio, como PaddedStringBuilder, que proporciona los mismos métodos pero aplica el relleno que desea, ya que no puede heredar.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top