Java: StringBuffer & Concaténation
Je suis en utilisant StringBuffer en Java pour la concaténation de chaînes, comme suit:
StringBuffer str = new StringBuffer();
str.append("string value");
Je voudrais savoir si il y a une méthode (bien que je n'ai pas trouver quelque chose à partir d'un rapide coup d'œil à la documentation), ou un autre moyen d'ajouter "rembourrage".
Laissez-moi vous expliquer; à chaque fois que je ajouter 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. Est-il un moyen de définir l'objet, de sorte que l'ajout d'un espace automatiquement après chaque ajout?
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");
Je vais utiliser StringBuilder même si, comme grom suggéré, mais c'est la façon dont le code ressemble à droite maintenant
pouvez-vous nous montrer certains de votre code lorsque vous ajoutez des éléments? Parce que peut-être il ya une autre façon de construire la chaîne qui aurait plus de sens.
hmm, en fait j'ai une boucle while qui ajoute une entrée à une chaîne, et la boucle existe lorsque l'entrée se termine par un ";"
Il est probablement plus élégant (et plus rapide) pour utiliser une expression régulière pour déterminer s'il faut exécuter la requête ou non, par exemple: if (query.correspond à(".*;\s*")) {
Ne serait-il pas préférable de vérifier d'entrée se termine par ';' au lieu de la conversion de la mémoire tampon à une chaîne à chaque fois?
OriginalL'auteur Jean Paul Galea | 2008-09-30
Vous devez vous connecter pour publier un commentaire.
Je pense que c'est géré plus facilement, soit avec une méthode d'assistance (code non testé):
Ou même en utilisant un Générateur de modèle avec une interface fluide (également le code non testé):
Voici un l'article sur le sujet.
Espère que cela aide! 🙂
Mon plaisir. Laissez-moi savoir si vous avez toute sorte de problèmes et je serai heureux de vous aider! 🙂
OriginalL'auteur kolrie
Vous devriez être en utilisant StringBuilder.
OriginalL'auteur grom
StringBuffer est définitive. Vous ne pouvez pas vous en tirer.
La Meilleure solution est d'ajouter le rembourrage pour vous-même. Écrire une méthode et utiliser un PADDING-Constant, de sorte que vous pouvez facilement le modifier, ou mieux de la mettre dans un paramètre.
OriginalL'auteur Dimo
Pouvez-vous ne pas créer une nouvelle classe qui s'enroule autour de
StringBuffer
et ajouter unappendWithTrailingSpace()
méthode?(Bien que vous pouvez appeler votre méthode de quelque chose d'un peu plus courte.)
Comment fonctionne une réponse incorrecte acceptée et pire upvoted? Ce n'est pas possible à la sous-classe StringBuffer
Oups. Vous avez raison. J'ai changé la réponse de lire "s'enroule autour de" plutôt que de "s'étend". Malheureusement, il n'est pas aussi soigné de cette façon.
En fait, je pense que l'habillage de la chaîne de la mémoire tampon est tout simplement parfait. Sous-classement n'est pas vraiment approprié dans ce cas - vous êtes vraiment à la création d'un " constructeur de l'objet à l'aide de la composition. Rien de mal avec elle, et si vous décidez d'utiliser une autre application, vous pouvez...
OriginalL'auteur Dave Webb
Il suffit d'ajouter le vous-même l'espace, c'est assez facile, comme par votre propre exemple.
même si oui, je pourrais faire ceci: String bar = " "; str.append(foo + bar); mais encore, je veux savoir si il ya une meilleure façon de le faire
OriginalL'auteur Johan
Une autre possibilité est que StringBuilder les objets renvoient eux-mêmes lorsque vous appelez ajouter, ce qui signifie que vous pouvez faire:
Pas tout à fait aussi lisse, mais c'est probablement une solution plus facile que l' + "" la méthode.
Une autre possibilité est de construire une classe wrapper, comme PaddedStringBuilder, qui fournit les mêmes méthodes, mais s'applique à la marge que vous voulez, puisque vous ne pouvez pas hériter.
OriginalL'auteur Guvante