Question

J'utilise StringBuffer en Java pour concaténer des chaînes, comme suit:

StringBuffer str = new StringBuffer();

str.append("string value");

J'aimerais savoir s'il existe une méthode (même si je n'ai rien trouvé d'un simple coup d'œil dans la documentation) ou un autre moyen d'ajouter "padding".

Laisse-moi t'expliquer; chaque fois que j'ajoute quelque chose à la chaîne, je veux ajouter un espace à la fin, comme ceci:

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

et j'ai plusieurs appels à ajouter .. et à chaque fois, je veux ajouter un espace. Existe-t-il un moyen de définir l’objet pour qu’il ajoute automatiquement un espace après chaque ajout?

MODIFIER -

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

Je vais utiliser StringBuilder comme suggéré par Grom, mais c'est ainsi que le code a l'air maintenant

Était-ce utile?

La solution

Je pense que cela est plus facile à gérer avec une méthode d'assistance (code non testé):

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 même en utilisant un motif Builder avec une interface fluide (également du code non testé):

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

Voici un article sur le sujet.

J'espère que ça aide! :)

Autres conseils

Vous devriez utiliser StringBuilder . .

  

Dans la mesure du possible, il est recommandé d'utiliser cette classe plutôt que StringBuffer, car elle sera plus rapide avec la plupart des implémentations.

StringBuffer est final. Vous ne pouvez pas en tirer. La meilleure solution consiste à ajouter le rembourrage pour vous-même. Écrivez-lui une méthode et utilisez une constante PADDING pour pouvoir la modifier facilement ou mieux la placer dans un paramètre.

Ne pouvez-vous pas créer une nouvelle classe englobant StringBuffer et ajouter une méthode appendWithTrailingSpace () ?

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

(Bien que vous souhaitiez peut-être appeler votre méthode quelque chose d'un peu plus court.)

Ajoutez simplement l'espace vous-même, c'est assez simple, selon votre propre exemple.

Une autre possibilité est que les objets StringBuilder se renvoient eux-mêmes lorsque vous appelez append, ce qui signifie que vous pouvez faire:

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

Pas tout à fait aussi lisse, mais c'est probablement une solution plus facile que le + " méthode.

Une autre possibilité consiste à créer une classe wrapper, telle que PaddedStringBuilder, qui fournit les mêmes méthodes mais applique le remplissage souhaité, car vous ne pouvez pas hériter.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top