StringBuilder .setLength Methode wirkungslos?

Geek

Mitglied
Wenn ich einen Stringbuilder erstelle, der die Puffergröße 100 hat, dann diesem SB einen String hinzufüge und die .setlength Methode aufrufe, dann bleibt die Puffergröße bei 100 obwohl in der Doku drin steht, dass ein neuer SB mit der gegebenen Länge erstellt werden würde.

Insofern ist meine Frage, welchen Nutzen hat die .setlength Methode?
Wenn ich die Puffergröße reduzieren möchte, dann habe ich dafür ja die .trimToSize() Methode.

Beispiel:
Java:
        StringBuilder sb = new StringBuilder(100); // Capacity ist jetzt 100
        sb.append("Irgend ein Textstring den wir hier nutzen");
        System.out.println("Puffergröße = " + sb.capacity()
                + "  | Länge des Strings = "
                + sb.length() + "  | "
                + sb.toString());
        sb.setLength(sb.length()); // Jetzt wenden wir setLength() an

        /* Hat's irgendwas gebracht, wie man wegen folgendem erwarten könnte?
           "Sets the length of the character sequence. The sequence is changed to
           a new character sequence whose length is specified by the argument."
         */
        System.out.println("Puffergröße = " + sb.capacity()
                + "  | Länge des Strings = "
                + sb.length() + "  | "
                + sb.toString());
        // Hm, immer noch alles wie vorher
        sb.trimToSize();
        System.out.println("Puffergröße = " + sb.capacity()
                + "  | Länge des Strings = "
                + sb.length() + "  | "
                + sb.toString());
        // Nur trimToSize() hat etwas gebracht.

Wenn ich den int Wert in sb.setLength() kleiner setze, als sb.length ausgibt, dann wirft mir
der Code eine Exception. Zum Abschneiden von Strings ist diese Methode also auch nicht zu gebrauchen.

Wozu ist also setLength(int) wirklich gut bzw. wofür wird es verwendet?

Die Doku habe ich dazu jetzt zweimal durchgelesen, aber ich werde dadurch auch nicht schlauer.
 
Wenn ich einen Stringbuilder erstelle, der die Puffergröße 100 hat, dann diesem SB einen String hinzufüge und die .setlength Methode aufrufe, dann bleibt die Puffergröße bei 100 obwohl in der Doku drin steht, dass ein neuer SB mit der gegebenen Länge erstellt werden würde.
Nein, das steht da meines Erachtens nicht. Es wird eine Zeichenfolge der neuen Länge erstellt, die im bereits vorhandenen Puffer des bereits vorhandenen StringBuilders gespeichert wird (zumindest wenn die neue Länge in den alten Puffer passt).
Insofern ist meine Frage, welchen Nutzen hat die .setlength Methode?
Sie setzt die Zeichenfolge auf die angegebene Länge, d.h. sie schneidet entweder die letzten Zeichen ab, oder füllt hinten mit Leerzeichen auf.
Wenn ich den int Wert in sb.setLength() kleiner setze, als sb.length ausgibt, dann wirft mir
der Code eine Exception.
Kann ich nicht nachvollziehen. Hast du ein Beispiel?
 
Sie setzt die Zeichenfolge auf die angegebene Länge, d.h. sie schneidet entweder die letzten Zeichen ab, oder füllt hinten mit Leerzeichen auf.

Kann ich nicht nachvollziehen. Hast du ein Beispiel?

Okay, da lag ich wohl im Irrtum.
Ich hatte vorhin beim Testen der setLength() Methode noch auf einen Indexbereich zugegriffen, der danach ja nicht mehr da war. Das warf mir die IndexOutOfBounds Exception und daher ging ich davon aus, das sie zum Abschneiden wohl nicht zu gebrauchen ist. Ich hätte genauer auf die Fehlermeldung schauen sollen, warum die Exception überhaupt geworfen wird.

Damit ist mir die Methode jetzt klar, also kann ich sie zum Abschneiden von Zeichenfolgen verwenden.

Danke für die Antwort.
 

Neue Themen


Zurück
Oben