Die Klasse String­Buil­der lässt sich in Java anstelle eines her­kömm­li­chen Strings nutzen. Im Vergleich zu einem ge­wöhn­li­chen String er­mög­licht sie direkte An­pas­sun­gen innerhalb der Zei­chen­ket­te. Solche Mo­di­fi­ka­tio­nen lassen sich über ver­schie­de­ne Methoden anstoßen.

Java String­Buil­der als Al­ter­na­ti­ve zum klas­si­schen String

Die Klasse Strings in Java ist un­ver­än­der­bar und ver­zich­tet auf Un­ter­klas­sen. Eine ef­fi­zi­en­te Aus­weich­mög­lich­keit zur finalen Java-Klasse stellt der String­Buil­der dar. Dieser erzeugt eine Zei­chen­fol­ge, die selbst nach der Er­stel­lung noch mo­di­fi­zier­bar bleibt. Der Java String­Buil­der weist Ähn­lich­kei­ten zum String­Buf­fer auf. Obwohl beide Klassen ver­gleich­ba­re Aufgaben über­neh­men, wird der String­Buil­der – anders als die Buffer-Variante – nicht syn­chro­ni­siert. Arbeitest du mit einem einzelnen Thread, ist diese Option besonders ratsam, da sie deutlich per­for­man­ter arbeitet. Wir zeigen dir die Klasse und ihre Mög­lich­kei­ten im Detail.

Syntax und prak­ti­scher Nutzen

Die Syntax des String­Buil­der in Java folgt stets einem festen Schema und sieht so aus:

public final class StringBuilder
	extends Object
		implements Serializable, CharSequence
java

Um die Funk­ti­ons­wei­se und den Zweck der Klasse zu verstehen, hilft ein Blick auf die reguläre String-Klasse. Sobald du dort ein Objekt de­kla­rierst, bleibt dieses fix. Möchtest du den Inhalt ändern, wird im Hin­ter­grund ein neues Objekt mit dem an­ge­pass­ten Wert generiert und abgelegt. Das erzeugt unnötigen Datenmüll und kann die Per­for­mance bremsen. Setzt du hingegen den String­Buil­der in Java für deine Zei­chen­fol­gen ein, werden Kor­rek­tu­ren direkt an der be­stehen­den Abfolge vor­ge­nom­men, ohne einen neuen String zu ge­ne­rie­ren. Das spart Res­sour­cen und sorgt dafür, dass deine An­wen­dun­gen glatt laufen.

Con­s­truc­tors der Klasse

Die Klasse Java String­Buil­der bietet vier Con­s­truc­tors an, um die Zei­chen­ket­te in das passende Format zu bringen. Zudem dienen sie der In­iti­al­kon­fi­gu­ra­ti­on. Hier sind die Con­s­truc­tors und ihre Funk­tio­nen:

  • StringBuilder(): Erzeugt einen leeren String­Buil­der mit einer Stan­dard­ka­pa­zi­tät von 16 Zeichen.
  • StringBuilder(int capacity): Erstellt einen leeren String­Buil­der, dessen Kapazität du über das Argument „capacity“ selbst festlegst.
  • StringBuilder(CharSequence seq): Generiert einen String­Buil­der mit den Zeichen der an­ge­ge­be­nen Char-Sequenz.
  • StringBuilder(String str): Erstellt einen String­Buil­der auf Basis eines vor­han­de­nen Strings.

Wie diese Con­s­truc­tors in der Praxis arbeiten, ver­deut­licht ein kurzes Code-Beispiel. Hier siehst du alle vier Varianten im Einsatz:

public class Main {
	public static void main(String[] argv) throws Exception {
	StringBuilder str = new StringBuilder();
	str.append("ABC");
	System.out.println("Erster Constructor = " + str.toString());
	StringBuilder str2 = new StringBuilder(5);
	System.out.println("Zweiter Constructor = " + str2.capacity());
	StringBuilder str3 = new StringBuilder("ABCDEFGHIJK");
	System.out.println("Dritter Constructor = " + str3.toString());
	StringBuilder str4 = new StringBuilder(str3.toString());
	System.out.println("Vierter Constructor = " + str4.toString());
	}
}
java

Ver­wen­dest du nun den Java-Befehl System.out.println für die Text­aus­ga­be, sieht das Ergebnis so aus:

Erster Constructor = ABC
Zweiter Constructor = 5
Dritter Constructor = ABCDEFGHIJK
Vierter Constructor = ABCDEFGHIJK
java

Methoden des String­Buil­der in Java

Für die Java-Klasse String­Buil­der exis­tie­ren zahl­rei­che Methoden. Die wich­tigs­ten Funk­tio­nen stellen wir dir hier anhand prak­ti­scher Code-Snippets vor.

append()

Mit der Methode append() fügst du einen String an einen be­stehen­den an. append() un­ter­stützt dabei ver­schie­de­ne Parameter. In der Anwendung sieht das so aus:

public class Main {
	public static void main(String[] argv) throws Exception {
	StringBuilder str = new StringBuilder("ABCDE");
	str.append("FGHIJK");
	System.out.println(str);
	}
}
java

Das Ergebnis der Ausgabe lautet:

ABCDEFGHIJK
java

insert()

Die Methode insert() nutzt du beim Java String­Buil­der, um Text an einer exakt de­fi­nier­ten Position ein­zu­schleu­sen. Ein Beispiel zur Ver­an­schau­li­chung:

public class Main {
	public static void main(String[] argv) throws Exception {
	StringBuilder str = new StringBuilder("ABCDE");
	str.insert(1,"FGHIJK");
	System.out.println(str);
	}
}
java

So sieht die zu­ge­hö­ri­ge Ausgabe aus:

AFGHIJKBCDEFGHIJK
java

Über den Integer (hier die 1) bestimmst du den Index, an dem der neue String eingefügt wird.

replace()

Die Methode replace() tauscht einen kom­plet­ten String oder Teile davon aus. Den Bereich de­fi­nierst du via be­gin­In­dex und endIndex. Hier das passende Beispiel dazu:

public class Main {
	public static void main(String[] argv) throws Exception {
	StringBuilder str = new StringBuilder("ABCDE");
	str.replace(1,4,"FGHIJK");
	System.out.println(str);
	}
}
java

Deine Ausgabe verändert sich dadurch wie folgt:

AFGHIJKE
java

reverse()

Mithilfe der Methode reverse() spiegelst du die gesamte Zei­chen­ket­te. Auch hierzu ein kurzes Beispiel:

public class Main {
	public static void main(String[] argv) throws Exception {
	StringBuilder str = new StringBuilder("ABCDE");
	str.reverse();
	System.out.println(str);
	}
}
java

Das liefert folgendes Ergebnis:

EDCBA
java

delete()

Nutzt du die Methode delete() beim Java String­Buil­der, kannst du Teile oder den ganzen Text entfernen. Den zu lö­schen­den Bereich grenzt du über be­gin­In­dex und endIndex ein:

public class Main {
	public static void main(String[] argv) throws Exception {
	StringBuilder str = new StringBuilder("ABCDE");
	str.delete(1,4);
	System.out.println(str);
	}
}
java

Das Resultat sieht dann so aus:

AE
java

capacity()

Die Methode capacity() verrät dir die aktuell ver­füg­ba­re Zei­chen­ka­pa­zi­tät des Java String­Buil­ders. Stan­dard­mä­ßig liegt diese bei 16. Bei einer Er­wei­te­rung greift die Logik „Aktuelle Länge * 2 + 2“. Startest du also bei 16, wird auf 32 ver­dop­pelt und um zwei auf 34 erhöht. Hier das Beispiel:

public class Main {
	public static void main(String[] argv) throws Exception {
	StringBuilder str = new StringBuilder();
System.out.println(str.capacity());
str.append("ABCDE");
System.out.println(str.capacity());
	str.append("Dies ist ein anderes Beispiel");
	System.out.println(str.capacity());
	}
}
java

Die Ausgabe liest sich fol­gen­der­ma­ßen:

16
16
34
java

en­su­re­Ca­pa­ci­ty()

Die Methode ensureCapacity() ga­ran­tiert, dass der Spei­cher­platz min­des­tens einem fest­ge­leg­ten Wert ent­spricht. Reicht der Platz nicht aus, wird die Kapazität erneut nach dem Schema „Bisherige Länge * 2 + 2“ angepasst. Das zeigt dieses Beispiel:

public class Main {
	public static void main(String[] argv) throws Exception {
	StringBuilder str = new StringBuilder();
System.out.println(str.capacity());
str.append("ABCDE");
System.out.println(str.capacity());
	str.append("Dies ist ein anderes Beispiel");
	System.out.println(str.capacity());
	str.ensureCapacity(5);
	System.out.println(str.capacity());
	str.ensureCapacity(40);
	System.out.println(str.capacity());
	}
}
java

Damit erhältst du diese Anzeige:

16
16
34
34
70
java

Zunächst griff zweimal der Stan­dard­wert (16), danach zweimal der ver­dop­pel­te Wert plus zwei (34) und am Ende wurde die Kapazität nochmals auf 70 (34 * 2 + 2) hoch­ge­schraubt.

Zum Hauptmenü