Domanda

Sto usando StringBuffer in Java per concatenare stringhe insieme, in questo modo:

StringBuffer str = new StringBuffer();

str.append("string value");

Vorrei sapere se esiste un metodo (anche se non ho trovato nulla da una rapida occhiata alla documentazione) o un altro modo per aggiungere " padding " ;.

Lasciami spiegare; ogni volta che aggiungo qualcosa alla stringa, voglio aggiungere uno spazio alla fine, in questo modo:

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

e ho diverse chiamate da aggiungere .. e ogni volta, voglio aggiungere uno spazio. C'è un modo per impostare l'oggetto in modo che aggiunga automaticamente uno spazio dopo ogni aggiunta?

EDIT -

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");

Userò StringBuilder anche se come suggerito grom, ma è così che il codice appare adesso

È stato utile?

Soluzione

Penso che questo sia gestito più facilmente con un metodo di supporto (codice non testato):

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 anche usando un modello Builder con un'interfaccia fluida (anche codice non testato):

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

Ecco un articolo sull'argomento.

Spero che sia d'aiuto! :)

Altri suggerimenti

Dovresti utilizzare StringBuilder .

  

Ove possibile, si consiglia di utilizzare questa classe preferibilmente a StringBuffer poiché sarà più veloce nella maggior parte delle implementazioni.

StringBuffer è definitivo. Non puoi derivarne. La migliore soluzione è davvero quella di aggiungere l'imbottitura per te. Scrivi un metodo per questo e usa una costante PADDING in modo che tu possa facilmente cambiarlo, o meglio inserirlo in un parametro.

Non puoi creare una nuova classe che avvolge StringBuffer e aggiungere un metodo appendWithTrailingSpace () ?

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

(Anche se potresti voler chiamare il tuo metodo un po 'più breve.)

Basta aggiungere lo spazio da soli, è abbastanza facile, come per il tuo esempio.

Un'altra possibilità è che gli oggetti StringBuilder si restituiscano quando si chiama append, il che significa che è possibile fare:

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

Non altrettanto fluido, ma è probabilmente una soluzione più semplice di + " & Quot; metodo.

Un'altra possibilità è quella di creare una classe wrapper, come PaddedStringBuilder, che fornisce gli stessi metodi ma applica il riempimento desiderato, poiché non è possibile ereditare.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top