Ein String ist eine Zeichenkette. Der Datentyp String hat als Wertebereich die Menge aller Zeichenketten. Strings werden in Anführungszeichen gesetzt; Beispiele für Strings sind "abba", "Hallo Fritz!", "@%#&$", "x" sowie auch "". Die Länge eines Strings ist die Anzahl der Zeichen, aus denen er besteht. So hat beispielsweise der String "abba" die Länge 4. Der leere String "" hat die Länge 0, da er 0 Zeichen enthält. Die einzelnen Zeichen eines Strings der Länge n werden von 0 bis n-1 nummeriert.
Das folgende Programmstück zeigt die Deklaration einer Variablen vom Typ String gefolgt von einer Wertzuweisung und anschließender Ausgabe des Strings.
Der Datentyp String ist in Java kein einfacher Datentyp wie etwa int oder double oder boolean, sondern eine Klasse. Eine Variable vom Typ String enthält daher nicht den String selbst, sondern sie enthält einen Verweis auf ein Objekt der Klasse String.
Die wichtigste Konsequenz aus dieser Tatsache ist, dass Strings nicht mit dem Vergleichsoperator == verglichen werden können, denn der Vergleichsoperator prüft, ob die Verweise gleich sind und nicht, ob die Strings gleich sind, auf die verwiesen wird. Für den Vergleich von Strings steht die Methode equals zur Verfügung (s.u.).
Obwohl Strings eigentlich Objekte sind, sieht die Wertzuweisung syntaktisch genauso aus wie bei den einfachen Datentypen. Tatsächlich aber wird mit der Anweisung
implizit ein String-Objekt erzeugt. Explizit lässt sich ein String-Objekt mit der Anweisung
erzeugen. Die implizite Erzeugung ist quasi eine Kurzschreibweise für die explizite Erzeugung.
Bemerkung: Ob implizit oder explizit – eigentlich sollte kein Unterschied bei der Erzeugung eines String-Objekts bestehen. Tatsächlich jedoch wird jedoch nur bei der expliziten Erzeugung mit new wirklich immer ein neues String-Objekt angelegt. Bei der impliziten Erzeugung ist es dem Compiler überlassen, ob er ein neues String-Objekt anlegt oder ob er nur einen Verweis auf ein bestehendes String-Objekt gleichen Inhalts erzeugt. Im letzteren Fall funktioniert der Vergleich mit == dann doch!
Da man sich darauf aber nicht verlassen kann, gilt die Regel:
Strings immer mit der Methode equals vergleichen
Noch in einer anderen Hinsicht werden Strings wie einfache Datentypen behandelt. Strings lassen sich nämlich mit dem Operator + verketten.
Strings lassen sich auch mit Werten anderer Datentypen verketten; hierbei werden diese automatisch in Strings umgewandelt.
Achtung: Ausdrücke mit dem Operator + werden von links nach rechts ausgewertet. Da das Zeichen + auch für die Addition von Zahlen verwendet wird, wird durch die Reihenfolge bei der Auswertung bestimmt, ob Addition oder Verkettung gemeint ist. Gegebenenfalls kann die gewünschte Reihenfolge mithilfe von Klammern bestimmt werden.
Für weitere Operationen mit Strings stehen in der Klasse String eine ganze Reihe von Objektmethoden zur Verfügung. Die Methoden werden immer jeweils auf ein Objekt der Klasse String angewendet.
Die Methode
boolean equals(String s)
prüft, ob zwei Strings gleich sind. In folgendem Beispiel sind die Strings gleich.
Die Prüfung if (s==t) hätte dagegen möglicherweise Ungleichheit ergeben, da die Variablen s und t möglicherweise auf verschiedene Objekte verweisen.
Die Methode
int length()
ergibt die Länge des Strings.
Mit der Methode
String substring(int i, int j)
lässt sich ein Teilstring eines Strings ermitteln. Die Parameter i und j haben folgende Bedeutung: i ist die Startposition des Teilstrings, j ist die Position i plus Länge des Teilstrings. D.h. i ist die Startposition, aber j ist nicht die Endposition des Teilstrings, sondern die Endposition plus 1, bzw. die erste Position des Strings, die nicht mehr zum Teilstring gehört.
Mit der Funktion substring lässt sich auch ein einzelnes Zeichen aus einem String herausgreifen.
Wird beim Aufruf der Methode substring nur der erste Parameter i angegeben, so ist das Ergebnis der Teilstring von Position i bis zum Ende des Strings. Der Aufruf
bedeutet also dasselbe wie
Es gibt noch eine ganze Reihe weiterer String-Methoden. Die wichtigsten sind
boolean startsWith(String x) | true, wenn der String mit x anfängt | |
boolean endsWith(String x) | true, wenn der String mit x aufhört | |
boolean isEmpty() | true, wenn der String leer ist | |
int compareTo(String x) | geeignet für das lexikografische Sortieren von Strings | |
int indexOf(String x) | die Position, an der String x im String vorkommt, bzw. -1 falls er nicht vorkommt | |
String toLowerCase() | wandelt alle Großbuchstaben in Kleinbuchstaben um | |
String toUpperCase() | wandelt alle Kleinbuchstaben in Großbuchstaben um | |
String trim() | entfernt alle Leerzeichen am Anfang und am Ende des Strings | |
String[] split(String s) | spaltet den String in Teilstrings anhand des Trennsymbols s auf |
Die Methode split wird meistens dazu verwendet, um einen Text in einzelne Wörter zu zerlegen; das Trennsymbol ist dann das Leerzeichen. Das Ergebnis ist ein String-Array.
Weiter mit: [Funktionen] [Literatur] oder [up]