Pergunta

Estou usando StringBuffer em java para concatar strings juntos, como assim:

StringBuffer str = new StringBuffer();

str.append("string value");

Gostaria de saber se há um método (embora eu não tenha encontrado nada de uma rápida olhada na documentação) ou outra maneira de adicionar "preenchimento".

Deixe-me explicar; Toda vez que eu anexo algo à string, quero adicionar um espaço no final, assim:

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

E eu tenho várias ligações para anexar ... e toda vez, quero adicionar um espaço. Existe uma maneira de definir o objeto para adicionar um espaço automaticamente após 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");

Vou usar StringBuilder, porém, como Grom sugeriu, mas é assim que o código parece agora

Foi útil?

Solução

Eu acho que isso é tratado com mais facilidade com um método auxiliar (código não testado):

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! ;)
}

Ou mesmo usando um padrão do construtor com uma interface fluente (também código não testado):

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();
    }
}

Aqui está um artigo sobre o assunto.

Espero que ajude! :)

Outras dicas

Você deveria estar usando StringBuilder.

Sempre que possível, é recomendável que esta classe seja usada em preferência ao StringBuffer, pois será mais rápido na maioria das implementações.

StringBuffer é final. Você não pode derivar disso. A melhor solução é realmente adicionar o preenchimento para si mesmo. Escreva um método para ele e use uma constante de preenchimento para que você possa alterá-lo facilmente ou coloque-o em um parâmetro.

Você não pode criar uma nova classe que envolve StringBuffer e adicione um appendWithTrailingSpace() método?

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

(Embora você possa querer chamar seu método de algo um pouco mais curto.)

Basta adicionar o espaço sozinho, é fácil o suficiente, conforme seu próprio exemplo.

Outra possibilidade é que os objetos de StringBuilder retornem quando você chama o Append, o que significa que você pode fazer:

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

Não é tão liso, mas provavelmente é uma solução mais fácil do que o método + "".

Outra possibilidade é construir uma classe de wrapper, como o ScorpDtringBuilder, que fornece os mesmos métodos, mas aplica o preenchimento que você deseja, pois você não pode herdar.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top