Strings und Zeichenketten-Verarbeitung
Die Klassen „java.lang.String" , java.lang.StringBuilder und „java.lang.StringBuffer" dienen der Behandlung von Zeichenketten. String ist eine einfach zu handhabende, relative sichere und mächtige Klasse; StringBuffer und StringBuilder werden benutzt, um Zeichenketten performant zusammen zu bauen: Sie finden hier eine ganze Reihe von append(..) und insert(..)- Methoden für unterschiedliche Datentypen und Objekte. StringBuffer und StringBuilder besitzen eine fast identische Api und leisten dasselbe. Der Unterschied ist, daß StringBilder, die neuere Klasse, nicht Thread-sicher ist, dafür aber performanter. Nutzen Sie StringBuilder wenn Sie sicher sind, daß auf das StringBuilder Objekt nur aus einem Thread heraus zugegriffen wird, anderenfalls StringBuffer.
Ist der StringBuffer fertig, haben Sie zwei Möglichkeiten, um ihn in einen String zur Weiterverarbeitung umzuwandeln:
String s= strBuffer.toString();
String s=new String(strBuffer);
Objekte der Klasse String selbst sind final undkönnen nicht mehr verändert werden. Werden Veränderungan einem String-Objekt vorgenommen, so wird in jedem Fall ein neuer String erzeugt benutzt. Das ist eine speichertechnische Sache des Computers, der Computer legt sozusagen jeden veränderten String neu und in einem anderen Speicherbereich an. Im Grunde braucht uns das nicht zu interessieren, allerdings ergeben sich daraus zwei interessante Konsequenzen:
- Wir brauchen uns niemals Sorgen zu machen, dass unser String inirgendeiner Methode verändert wurde. Das passiert garantiert nicht. Unser String verhält sich hier wie ein primitiver Datentyp. Beim StringBuffer hingegen ist diese Gefahr wie bei allen anderen Objekten real. Veränderungen, die irgendwo an einem Objekt vorgenommen werden, wirken sich an jeder Stelle aus.
- Operationen auf String – Basis sind viel langsamer als StringBuffer Operationen, da jedes Mal ein neues Objekt erzeugt werden muss.
Obwohl Strings Klassen sind, gelten für sie einige Vereinfachungen: So können Sie einen String wie einen primitiven Datentype durch einfache Zuweisung erzeugen:
String s="jajaja!";
Der Plus-Operator (+) lässt sich auf Strings anwenden, um sie zu einem neuen String zusammen zu fassen:
String s="ja"+" oder"+" nein";
Darüber hinaus lassen sich primitive Datentypen durch Addition mit einem String in einen solchen umwandeln:
String s=1+""; // s ist "1"
Objekte werden durch eine solche Operation in ihrer toStirng() Darstellung ausgegeben. Dabei besitzt der Plus + Operator gegenüber der toString()-Methode den Vorteil, dass keine Null-Pointer-Exception auftritt, wenn das Objekt null ist.
Genau wie Character unterstützen Strings und StringBuffer Unicode. Die Klasse String bietet daneben eine Fülle nützlicher Methoden zur Zeichenketten-Manipulation, die Sie sich am besten mittels der folgenden Aufgabe selbst erarbeiten.
Aufgabe: StringManipulation.java
Sie haben einen String original="Nickel-Metall-Hybrid-Akku";
Schreiben Sie eine Klasse, die folgendes leistet:
- Erzeugen Sie den String aus einem StringBuffer, indem sie dieappend(..) Methode von StringBuffer verwenden.
- Wandeln Sie den String in Grossbuchstaben um und geben Sie ihn aus.
- Geben Sie den Teilstring zwischen dem ersten und dem letzten "i" inKleinbuchstaben aus.
- Ersetzen Sie alle Gedankenstriche durch Leerzeichen.
- Kehren Sie die Reihenfolge der Wörter um.
- Geben Sie die ASCII - Werte der Buchstaben des Strings an. Heben Sieden ASCII Wert für den Gedankenstrich hervor.
- Suchen Sie das Wort, das im Alphabet zuerst kommt, und geben Sie esaus.
- Geben Sie die Wörter nach dem Alphabet sortiert aus.
Hinweis: Benutzen Sie die Dokumentation, um geeignete Methoden der Klasse String zu finden.
Musterlösung: java1.aufg.referenz.StringManipulation