example java concatenation stringbuffer

stringbuffer java example



Java: StringBuffer y concatenación (6)

¿No puedes crear una nueva clase que envuelva StringBuffer y agregar un método appendWithTrailingSpace() ?

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

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

Estoy usando StringBuffer en Java para concaturar cadenas, así:

StringBuffer str = new StringBuffer(); str.append("string value");

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

Dejame explicar; cada vez que agrego algo a la cadena, quiero agregar un espacio al final, así:

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 anexión?

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 en este momento


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 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 eso ayude! :)


Deberías estar usando 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.


Otra posibilidad es que los objetos StringBuilder se devuelvan cuando llamas a append, lo que significa que puedes hacer:

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

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

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


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


StringBuffer es final. No puedes derivar de eso. La mejor solución es agregar el relleno por ti mismo. Escribe un método para ello y usa una constante de relleno para que puedas cambiarla fácilmente o ponerla mejor en un parámetro.