Frage

I String in Java bin mit Strings zusammen verketten, etwa so:

StringBuffer str = new StringBuffer();

str.append("string value");

Ich würde gerne wissen, ob es ein Verfahren oder eine andere Art und Weise (obwohl ich nicht alles von einem schnellen Blick auf der Dokumentation gefunden habe) hinzufügen „padding“.

Lassen Sie mich erklären; jedesmal, wenn ich etwas auf den String anhängen, ich möchte einen Platz am Ende hinzufügen, etwa so:

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

und ich habe mehrere Anrufe anhängen .. und jedes Mal, ich möchte einen Raum hinzuzufügen. Gibt es eine Möglichkeit, das Objekt zu setzen, so dass sie einen Raum automatisch nach jedem append hinzufügen wird?

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

Ich werde String verwenden obwohl, wie Grom vorgeschlagen, aber das ist, wie der Code jetzt aussieht

War es hilfreich?

Lösung

Ich denke, das einfacher entweder mit einer Helfer-Methode behandelt wird (ungetestet Code):

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

oder auch ein Builder-Muster mit Fluent Interface (auch ungetestetem Code) mit:

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

Hier ist ein Artikel zu diesem Thema.

Hoffe, es hilft! :)

Andere Tipps

Sie sollten verwenden String .

  

Wo es möglich ist, empfiehlt es sich, dass diese Klasse in den Vorzug String verwendet werden, da es schneller unter den meisten Implementierungen sein wird.

String ist endgültig. Sie können nicht davon ableiten. Die beste Lösung ist wirklich die Polsterung für sich selbst hinzuzufügen. Schreiben Sie eine Methode für sie und verwendet ein padding-Konstante, so dass Sie leicht ändern können, oder besser gesagt es in einem Parameter.

Können Sie nicht eine neue Klasse erstellen, die sich um StringBuffer wickelt und eine appendWithTrailingSpace() Methode hinzufügen?

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

(Auch wenn Sie möchten Ihre Methode etwas ein wenig kürzer nennen.)

Sie einfach den Raum selbst hinzufügen, ist es einfach genug, wie pro Ihren eigenen Beispiel.

Eine andere Möglichkeit besteht darin, dass String Objekte selbst zurück, wenn Sie anhängen nennen, was bedeutet, Sie tun können:

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

Nicht ganz so glatt, aber es ist wahrscheinlich eine einfachere Lösung als die + „“ -Methode.

Eine andere Möglichkeit ist eine Wrapper-Klasse zu bauen, wie PaddedStringBuilder, die die gleichen Methoden bietet aber gilt die Polsterung Sie wollen, da Sie nicht erben können.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top