Eine Zeichenkette oder (aus dem Englischen) ein String ist in der Informatik eine Folge von Zeichen (z. B. Buchstaben, Ziffern, Sonderzeichen und Steuerzeichen) aus einem definierten Zeichensatz. Zeichen können sich in einer Zeichenkette wiederholen, die Reihenfolge der Zeichen ist definiert. Zeichenketten sind somit Sequenzen aus Symbolen mit endlicher Länge (http://de.wikipedia.org/wiki/Zeichenkette) .
Die objektorientierte Programmiersprache Java kennt primitive und komplexe Datentypen. Der Datentyp String ist strengenommen eine komplexer Datentypen. String ist eine Klasse, deshalb wird String auch im Gegensatz zu int oder double groß geschieben. 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 Klasse String stellt verschiedene Methoden zur Verwaltung der Zeichenketten zur Verfügung.
Eine deutsche Dokumentation aller Methoden ist hier zu finden:
http://www.dpunkt.de/java/Referenz/Das_Paket_java.lang/68.html.
Duch eine Zuweisung kann die Referenz z.B. der Variable name geändert werden, so dass sie nun auf das Objekt2 mit der Zeichenkette "Peter" verweist.
Jede Variable muss deklariert werden. Auch variablen vom Datentyp String. Die Deklaration folgt dem bekannten Aufbau:
Sichtbarkeit (optional) Datenyp Variablenname;
public String nachname;
Variablen mit komplexen Datenypen müssen initilisiert werden. Wird einer komplexen Variable kein Wert zu gewiesen, kann es zu dem Fall kommen, dass die Variable im Programmablauf aufgerufen wird und keinen Verweis auf eine Objekt hat. Der Objektzeiger ist dann null und es kommt zur so genannten Null-Pointer-Exception.
Die Initialisierung kann durch die
Zuweisung einer anderen Objektreferenz erfolgen: name = nachname oder
es wird ein neues Objekt erzeugt und zugewiesen: name = new String ("Müller");.
Zudem bietet das Objekt der Klasse String ein vereinfachte Syntax zur Objekterzeugung: String name = "Peter";Hier werden die Zeichenketten in Anführungsstriche geschrieben und der Variablen zu gewiesen, ähnlich wie bei primitiven Datentypen.
Ein Überprüfung durch die Vergleichsoperatoren == vergleicht nicht den Inhalt zweier Objekte, sondern lediglich deren Referenz. D. h. wenn beide Objekte wirklich auf denselben Platz im Arbeitsspeicher verweisen, dann ist diese Aussage "wahr". Ansonsten nicht.
Um wirklich die inhaltliche Übereinstimmung zweier Zeichenketten zu überprüfen, muss die equals-Methode der Klasse String eingetzt werden. Der Aufruf von Methoden auf Objekten erfolgt in der Punktnotation auf den String-Instanzen selbst. Dies gilt übrigens für alle Objekte und nicht nur für Instanzen der Klasse String.
Es gilt folgende Regel:
Primitive Datentypen und Referenzen werden mit ==, Objekte mit equals verglichen!
Eine Ausnahme gibt es. String Objekt können, wie oben beschrieben, auf zwei Wegen erstellt werden. Durch new .... wird tatsächlich ein neuer String in einer neuen Adresse erzeugt, so dass nur ein Vergleich mit Hilfe der equals-Methode möglich ist:
name = new String ("Müller");
Wird jedoch das String Objekt durch eine Eingabe in Anführungstriche erzeugt, wird das Sting Objekt nur dann in einer neuen Adresse gespeichert, wenn genau diese Folge von Zeichen nicht bereits im Programm erzeugt wurde. Wurde bereits eine gleiche Zeichenkette erzeugt, wird nur auf dieses String Objekt verwiesen. In diesem Falle liefert auch der Vergleich mit == ein richtiges Ergebnis.
name = "Peter";
Da nicht ausgeschlossen werden kann, das String Objekt mit Hilfe von new ... erzeugt werden, sollten grundsätzliche Methoden für den Vergleich eingesetzt werden!
Die String Klasse bietet eine Vielzahl an Methoden, um die Zeichen eines Strings zu verwalten; unter anderem für den Vergleich von Zeichenketten. Eine deutsche Dokumentation aller Methoden ist hier zu finden:
http://www.dpunkt.de/java/Referenz/Das_Paket_java.lang/68.html.
equalsIgnoreCase
Wenn Zeichenketten verglichen werden sollen, ohne dass Groß-/Kleinschreibung zu berücksichtigen ist, muss die Methode equalsIgnoreCase() eingesetzt werden.
Der Aufruf von Methoden auf Objekten erfolgt in der Punktnotation auf den String-Instanzen selbst.
contains
Die Objektmethode contains testet, ob ein Teilstring (engl. substring) in der Zeichenkette vorkommt, und liefert true, wenn das der Fall ist. So würde
"Dortmund".contains("mund")
true liefern.
compareTo
Neben der Überprüfung auf Gleichheit kann auch geprüft werden, ob zwei String-Objekte ungleich sind. Die Methode compareTo liefert einen int-Wert, der kleiner als null ist, wenn ein String lexikalisch kleiner ist als eine Vergleichs-String, null, wenn der String gleich Vergleichs-String ist, und einen Wert größer als null, wenn der String lexikalisch größer ist als der Vergleichs-String.
Beispiel 1
In diesem Beispiel wird die equals-Methode auf dem Objekt name ausgeführt. Als Eingabeparameter erhält die equals-Methode den String "Peter". Der Rückgabeparameter der equals-Methode liefert hier false, da die beiden Namen ungleich sind.
.....
private String name = "Müller";
if(name.equals("Peter")){
....
}
....
Beispiel 2
.....
private String vorname = "Peter";
private String nachname = "Peter";
if(vorname.equals(nachname)){
....
}
....
Beispiel 3
Hier wird die equals-Methode direkt auf dem String "Peter" ausgeführt. Als Eingabeparameter wird die Variable name vom Typ String übergeben. Die equals-Methode liefert hier als Rückgabeparameter den Wert false, da die equals-Methode Groß-/Kleinschreibung berücksichtig. Soll Groß-/Kleinschreibung nicht berücksichtigt werden, kann die Methode equalsIgnoreCase wie im Beispiel 4 eingesetzt werden.
.....
private String name = "peter";
if("Peter".equals(name)){
....
}
....
Beispiel 4
Hier wird die Methode equalsIgnoreCase auf dem Objekt name ausgeführt. Als Eingabeparameter erhält die Methode den String "Peter". Die Methode equalsIgnoreCase liefert hier true, da Groß-/Kleinschreibung nicht berücksichtigt wird.
.....
private String name = "peter";
if(name.equalsIgnoreCase("Peter")){
....
}
....
Beispiel 5
Die Methode compareTo wird auf dem String-Objekt name ausgeführt. Als Eingabeparameter wird der String "Peter" übergeben. Die Methode compareTo liefert als Rückgabeparameter eine Wert kleiner als null, da "Müller" lexikalisch kleiner als "Peter" ist.
.....
private String name = "Müller";
if(name.compareTo("Peter")>1){
....
}
....