Programmieren

Datentyp String

Ein String ist eine Zeichenkette. Der Datentyp String hat als Wertebereich die Menge aller Zeichen­ketten. Strings werden in Anführungs­zeichen 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 beispiels­weise 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 Programm­stück zeigt die Deklaration einer Variablen vom Typ String gefolgt von einer Wert­zuweisung und anschließender Ausgabe des Strings.

String s;
s="Hallo!";
System.out.println(s);

Strings sind Objekte

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 Vergleichs­operator == verglichen werden können, denn der Vergleichs­operator 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 Wert­zuweisung syntaktisch genauso aus wie bei den einfachen Datentypen. Tatsächlich aber wird mit der Anweisung

s="Hallo!";

implizit ein String-Objekt erzeugt. Explizit lässt sich ein String-Objekt mit der Anweisung

s=new String("Hallo!");

erzeugen. Die implizite Erzeugung ist quasi eine Kurz­schreib­weise 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

Verkettung von Strings

Noch in einer anderen Hinsicht werden Strings wie einfache Datentypen behandelt. Strings lassen sich nämlich mit dem Operator + verketten.

String r, s, t;
r="abc";
s="de";
t=r+s;    // Verkettung von r und s
System.out.println(t);    // Ergebnis: "abcde"

Strings lassen sich auch mit Werten anderer Datentypen verketten; hierbei werden diese automatisch in Strings umgewandelt.

int k=3;
String s;
s="Die Zahl heißt "+k;    // Verkettung eines Strings und einer Zahl
System.out.println(s);    // Ergebnis: "Die Zahl heißt 3"

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. Gegebenen­falls kann die gewünschte Reihenfolge mithilfe von Klammern bestimmt werden.

int k=3;
String s;
s="Die Zahl heißt "+k+1;  // zweimal Verkettung
System.out.println(s);    // Ergebnis: "Die Zahl heißt 31"
s=k+1+" heißt die Zahl";  // einmal Addition und einmal Verkettung
System.out.println(s);    // Ergebnis: "4 heißt die Zahl"

String-Methoden

Für weitere Operationen mit Strings stehen in der Klasse String eine ganze Reihe von Objekt­methoden zur Verfügung. Die Methoden werden immer jeweils auf ein Objekt der Klasse String angewendet.

 

equals

Die Methode

boolean equals(String s)

prüft, ob zwei Strings gleich sind. In folgendem Beispiel sind die Strings gleich.

String s="abc", t="abc";
if (s.equals(t))
    System.out.println("gleich");
else
    System.out.println("ungleich");

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.

 

length

Die Methode

int length()

ergibt die Länge des Strings.

String s="abc";
int k=s.length();    // k erhält den Wert 3

 

substring

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 Start­position des Teilstrings, j ist die Position i plus Länge des Teilstrings. D.h. i ist die Start­position, 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.

String s="abcdefg";
String t=s.substring(2, 5);    // t erhält den Wert "cde"

Mit der Funktion substring lässt sich auch ein einzelnes Zeichen aus einem String heraus­greifen.

String s="abcde";
int i=2;
String t=s.substring(i, i+1);  // t erhält den Wert "c"

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

String t=s.substring(i);

bedeutet also dasselbe wie

String t=s.substring(i, s.length());
Weitere String-Methoden

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 Klein­buchstaben um
String toUpperCase() wandelt alle Klein­buchstaben 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]

 


H.W. Lang   mail@hwlang.de   Impressum   Datenschutz
Diese Webseiten sind während meiner Lehrtätigkeit an der Hochschule Flensburg entstanden