Unsere Datenschutzrichtlinie wird in Kürze aktualisiert. Bitte sehen Sie sich die Vorschau an.

Java 7 Grundkurs

String, StringBuffer, StringBuilder

Testen Sie unsere 2019 Kurse

10 Tage kostenlos!

Jetzt testen Alle Abonnements anzeigen
In diesem Film betrachten wir die Zeichenketten und deren Klassen näher. Wir beleuchten String, StringBuffer und StringBuilder und zeigen die Gemeinsamkeiten und Unterschiede.
08:11

Transkript

Zum Arbeiten mit Zeichenketten gibt es verschiedene Klassen in der Standardbibliothek. Wir schauen uns hier die Klassen String, StringBuffer und StringBuilder an und betrachten Gemeinsamkeiten und Unterschiede. Wenn es um Zeichenketten geht, denken Sie wahrscheinlich zuerst an String. Diese Klasse ist ja auch sehr einfach zu verwenden. Für das Erzeugen von String-Objekten muss ich z.B. nicht mal "New" aufrufen, wie man hier sehen kann. Bei jeder anderen Klasse müssen wir für die Objekterzeugung "New" und dann den Konstruktor-Namen angeben, dem wir dann einen Wert übergeben können. Es geht bei String zwar auch, es ist ja eine vollwertige Klasse, ist aber in der Regel unnötig. Nehme ich es also gleich wieder raus. Auch für das Aneinanderhängen von Strings könnten wir hier eine Methode aufrufen, aber es gibt den Operator Plus, der hier hervorragend funktioniert. Diese Art der String-Verkettung hat allerdings einen kleinen Nachteil und das hängt damit zusammen, dass String-Objekte grundsätzlich unveränderlich sind. Wenn ich also scheinbar eine Veränderung an einem bestehenden String vornehme, dann erzeuge ich eigentlich ein neues String-Objekt. Allein in dieser Zeile werden drei Objekte erzeugt. Das erste Objekt ist der String "Und". Das zweite String-Objekt entsteht, wenn ich "A", also "Klaus", mit diesem "Und"-String verknüpfe. Daraus entsteht ein neuer String, der heißt dann "Klaus Und". Diesen wiederum verknüpfe ich jetzt mit "B", also mit "Karla" und daraus entsteht schon wieder ein neues Objekt, nämlich das Objekt "Klaus und Karla". Auch das Ersetzen einzelner Zeichen führt jedesmal zur neuen Erzeugung eines neuen Objektes und manche Operationen, wie z.B. das "Einfügen" von Text an einer bestimmten Stelle, sind gar nicht möglich. Deshalb gibt es eine weitere Klasse, die heißt StringBuffer. Ein StringBuffer ist veränderlich. Wenn ich hier Zeichen einfüge oder anfüge, dann passt er seine Größe einfach entsprechend an. Nachteil: Er hat nicht die Sonderstellung der Klasse String, das heißt, ich muss zum Erzeugen den Konstruktor aufrufen, und das Pluszeichen funktioniert auch nicht bei StringBuffern. Diese vier Zeilen hier machen dasselbe, wie die drei Zeilen dort oben. Nur eben mit Methoden. Ich habe einen leeren StringBuffer, dann hänge ich mit der Methode append() nacheinander zwei Texte an und schließlich mache ich etwas, was bei Strings gar nicht geht, ich füge ein String ein. Dafür gibt es die Methode insert(). Ich muss hier die Position sagen, an der ich einfügen möchte und dann den Text, der dort hinein soll. StringBuffer sind also flexibler in der Anwendung, aber der Code ist ein bisschen schlechter lesbar. Aber sie gehen eben auch wesentlich effizienter mit dem vorhandenen Speicher um. Eine weitere Eigenschaft von StringBuffern besteht darin, dass sie thread-sicher sind, das heißt, mehrere Prozesse können gleichzeitig auf dasselbe StringBuffer-Objekt zugreifen. Der dafür notwendige, interne Mehraufwand bremst den StringBuffer allerdings etwas aus und es ist auch eine Funktionalität, die man nicht allzu oft benötigt. Deshalb wurde mit Java 5 eine weitere Klasse eingeführt, die im Prinzip das Gleiche tut wie ein StringBuffer, die auch dieselben Methoden anbietet, aber sie verzichtet auf die interne Synchronisation und ist dadurch natürlich wesentlich schneller. Diese Klasse heißt StringBuilder. Und solange eben nicht gerade mehrere Prozesse gleichzeitig auf dieses Objekt zugreifen, sollten Sie den StringBuilder bevorzugen. Das weiß natürlich auch NetBeans, deswegen haben wir vorne ein kleines Lämpchen dran, das sagt uns "StringBuffer can be replaced with StringBuilder". Klicken wir drauf und wir sehen, jetzt steht hier auf der linken Seite StringBuilder und auf der rechten auch. Nur der Kommentar stimmt jetzt nicht mehr. Können wir natürlich problemlos ändern. Und auch unsere Textausgabe hier unten müssen wir entsprechend anpassen. Gleichzeitig mit der Einführung des StringBuilders wurde auch dem Java-Compiler ein neues Feature hinzugefügt. Wenn er nämlich solche Stellen hier findet, an denen mehrere Strings nacheinander mit Plus verknüpft werden, dann ersetzt er das durch die Verwendung eines StringBuilders mit den entsprechenden append-Methoden. Sie können also beruhigt weiterhin die besser lesbare Variante mit dem Plus verwenden, bekommen aber gleichzeitig die Performance des StringBuilders. Damit gibt es eigentlich nur zwei Gründe von der String-Variante abzuweichen. Der erste ist, Sie schreiben ein Programm mit mehreren, parallel laufenden Prozessen, die alle auf denselben StringBuffer in dem Fall dann zugreifen müssen. Dann sollten Sie tatsächlich auch den StringBuffer verwenden. Und der zweite Grund nicht Strings zu verwenden, wäre, Sie nehmen sehr viele Veränderungen an einem bestehenden String vor, fügen Zeichen ein, hängen Texte an, entfernen einen Teil, ersetzen Zeichen durch andere Zeichen, dann ist der StringBuilder mit all seinen Methoden dafür das Tool der Wahl. Nun möchte ich Ihnen noch ein paar weitere Methoden der Klasse String vorstellen. Mit der Methode "toUpperCase()" wandeln sie alle Buchstaben in Großbuchstaben um bzw., um es korrekt zu formulieren, Sie erzeugen einen neuen String, der entsteht, wenn Sie den alten String nehmen, alle Buchstaben in Großbuchstaben umwandeln und diese dann in den neuen hineinschreiben. Das Gegenstück dazu heißt dann toLowerCase() und macht das Ganze in Richtung Kleinbuchstaben. Neben der Methode equals(), die ja alle Klassen anbieten, um zwei Objekte vergleichen zu können, gibt es in String noch eine Methode equalsIgnoreCase(), das heißt ein Vergleich unter Vernach- lässigung der Groß-, Kleinschreibung. Hier in meinem Beispiel nehme ich einen String, der nur aus Großbuchstaben besteht und vergleiche ihn mit dem, was ich aus dem StringBuffer rausholen kann bzw. nun StringBuilder, wenn ich die "toString()"-Methode aufrufe. Da diese beiden Strings dann unter Vernachlässigung der Groß-, Kleinschreibung gleich sind, bekomme ich hier auch ein "to" zurück. Eine weitere hilfreiche Methode in der Klasse "String", ist die Methode "split()". Mit ihr kann ich ein String in mehrere Einzelteile aufteilen. Wir haben hier in diesem Beispiel eine String-Variable, die heißt "Text" und die enthält den Text "Merkur, Venus, Erde, Mars". Jetzt rufe ich von diesem Text die Methode split() auf und übergebe ein Komma. Das ist also das Zeichen, an dem geteilt werden soll. Das Komma wird mit rausgestanzt und zurück kommt dann ein Array mit vier einzelnen Strings, nämlich Merkur, Venus, Erde und Mars. Möchte ich wissen, wie lang ein String ist, dann bietet er mir dafür die Methode length(). Ich habe in diese Zeile gleich noch eine zweite Sache eingebaut, ich zeige Ihnen nämlich hier, wie Sie Anführungszeichen ausgeben können. Normalerweise markiere ich ja mit Anführungszeichen den Anfang und das Ende eines Strings. Ich kann also nicht einfach mitten in einen String hinein ein Anführungszeichen setzen. Für den Compiler würde das so aussehen, als wäre der String an dieser Stelle bereits zu Ende und ich würde einen Compiler-Fehler bekommen. Um das Anführungszeichen seiner Sonderfunktion zu berauben und es als normales Zeichen behandeln zu können, setze ich einen umgekehrten Schrägstrich davor. Damit ist es dann ein Zeichen wie jedes andere und kann auch ganz normal ausgegeben werden. Als letztes Beispiel betrachten wir die Methode subString(). Mit dieser erzeuge ich aus einem Teil meines Strings ein neuen String. subString() gibt es in zwei Varianten. In der ersten Variante gebe ich einfach einen Index an und sage: "Ab hier bis zum Ende." Die Indexzählung ist dabei etwas umständlich. Sie machen es sich wahrscheinlich am leichtesten, wenn Sie nicht die Buchstaben zählen, sondern die Lücken. Sie fangen vor dem String an mit Null, nach dem "M" ist dann also die 1, nach dem "E" die 2, usw. Das heißt, wenn wir bis 7 zählen, dann sind wir nach dem Komma angekommen. In der zweiten Version der Methode subString() gebe ich einen Start- und einen Endindex an. Auch wieder nach derselben Zählweise. Ich zähle also hier einmal bis 3 und einmal bis 5, vor dem "M" fange ich mit Null an, dann also 1, 2, 3, hier geht es los beim "K" und dann 4, 5. Ich hole mir also die Buchstaben "K" und "U" heraus und baue daraus ein neuen String, den ich dann über "Noch Ein Teil" ansprechen kann. Jetzt führen wir das ganze Programm auch mal aus, um unsere theoretischen Betrachtungen auch mal praktisch bestätigt zu sehen. "Speichern", rechte Maustaste, "RunFile", und dann sehen wir hier, der String, den wir uns oben zusammengeschraubt haben, ich gehe nochmal hoch, hier, heißt tatsächlich "Klaus und Karla". Und das, was der StringBuilder liefert, heißt ebenfalls "Klaus und Karla". Funktioniert also. Das "Gleich", was wir besprochen haben, liefert tatsächlich "to" zurück, also das "Gleich" unter Vernachlässigung der Groß- und Kleinschreibung. Ein Aufsplitten dieses Strings und nachfolgendes Anzeigen der Einzelteile gibt uns die Planeten Merkur, Venus, Erde und Mars der Reihe nach. Das Split am Komma funktioniert also auch. Als nächstes sehen wir hier Anführungszeichen, noch ein Anführungszeichen und hier die Gesamtlänge des Strings ist 22. subString(7) liefert uns alles ab der 7. Position. Also Venus, Erde, Mars und subString(3,5) liefert, wie ich es gerade beschrieben habe, die Buchstaben "K" und "U". Das ist insgesamt natürlich nur ein kleiner Teil der Möglichkeiten, die Ihnen String und StringBuilder bieten. Eine vollständige Beschreibung finden Sie wie immer in der Java Docs zu den beiden Klassen.

Java 7 Grundkurs

Machen Sie sich mit den Grundlagen der Java-Programmierung vertraut und lernen Sie die Syntax der Sprache sowie das Konzept der objektorientierten Softwareentwicklung kennen.

8 Std. 32 min (66 Videos)
Derzeit sind keine Feedbacks vorhanden...
 

Dieser Online-Kurs ist als Download und als Streaming-Video verfügbar. Die gute Nachricht: Sie müssen sich nicht entscheiden - sobald Sie das Training erwerben, erhalten Sie Zugang zu beiden Optionen!

Der Download ermöglicht Ihnen die Offline-Nutzung des Trainings und bietet die Vorteile einer benutzerfreundlichen Abspielumgebung. Wenn Sie an verschiedenen Computern arbeiten, oder nicht den ganzen Kurs auf einmal herunterladen möchten, loggen Sie sich auf dieser Seite ein, um alle Videos des Trainings als Streaming-Video anzusehen.

Wir hoffen, dass Sie viel Freude und Erfolg mit diesem Video-Training haben werden. Falls Sie irgendwelche Fragen haben, zögern Sie nicht uns zu kontaktieren!