Java: StringBuffer & amp; Concatenazione
-
02-07-2019 - |
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
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.