03.03 Nützliche String-Methoden
Mit Strings
werden Sie viel arbeiten. Deshalb stelle ich Ihnen jetzt ein paar nützliche Methoden (zusätzlich zu den bereits bekannten length()
, equals()
und equalsIgnoreCase()
) zur Zeichenkettenverarbeitung vor.
String#charAt
Mit der charAt
Methode bekommen Sie ein Zeichen an einer bestimmten Stelle eines Strings
als char
. Möchten Sie z. B. das 3. Zeichen eines Strings
, so kann man folgende Methode aufrufen (charAt
fängt – wie Arrays – bei 0 das Zählen an):
String str = "geheim"; System.out.println(str.charAt(2));
String#contains / String#indexOf
Die Methode contains
überprüft, ob ein String
eine andere Zeichenkette enthält. Ist dies der Fall, so wird true zurück geliefert. indexOf
überprüft prinzipiell das Selbe, nur wird hier kein true oder false zurück geliefert, sondern die Stelle, an der sich die gesuchte Zeichenkette befindet. Ist der gesuchte String
nicht vorhanden, liefert indexOf
den Wert -1 zurück.
String str = "geheim"; String searchString = "heim"; if (str.contains(searchString)) { System.out.println(str + " enthält " + searchString + " ab der Stelle " + str.indexOf(searchString)); }
Der Methode indexOf
kann auch ein weiterer Wert übergeben werden – die Position ab wo gesucht werden soll. Dadurch lassen sich z. B. alle Positionen in einem String
feststellen, an denen ein bestimmtes Zeichen vorkommt.
String pana = "Panamakanal"; int counter = 0; for (int i = 0; i != -1;) { i = pana.indexOf("a", i); if (i != -1) { counter++; System.out.println("Ein 'a' an Stelle " + ++i); } } System.out.println("Insgesamt " + counter + " a im " + pana);
String#endsWith / String#startsWith
Diese beiden Methoden überprüfen, ob ein String
mit einer bestimmten Zeichenkette beginnt oder endet. Beide Methoden arbeiten case sensitive.
Wenn etwas case sensitive ist, dann wird auf Groß- und Kleinschreibung geachtet.
String str = "Anfang vom Ende"; if (str.startsWith("Anfang")) { System.out.println("Der String beginnt mit dem Anfang ..."); } if (str.endsWith("Ende")) { System.out.println("... und hört mit dem Ende auf."); }
String#replace
Durch diese Funktion ist es möglich eine Zeichenkette innerhalb eines Strings
durch eine Andere zu ersetzen. Der manipulierte String
wird zurückgegeben.
String str = "Ersetze_alle_'_'_durch_' '"; System.out.println("Vor dem Ersetzen"); System.out.println(str); System.out.println("Rückgabewert nach dem Ersetzen"); System.out.println(str.replace("_", " ")); System.out.println("Nochmal der alte String"); System.out.println(str); System.out.println("Alten String ersetzen"); str = str.replace("_", " "); System.out.println(str);
String#replaceAll
Ähnlich wie die Methode replace
, mit dem Unterschied, dass ein regulärer Ausdruck übergeben wird.
String message = "Am 24.12.2345 fällt Weihnachten aus!"; System.out.println(message); message = message.replaceAll("[0-9]", "x"); System.out.println(message);
String#substring
Hiermit können einzelne Teile aus einem String
extrahiert werden. Der manipulierte String
wird zurückgegeben.
String str = "Die ersten und die letzten zwei Zeichen müssen weg"; System.out.println(str.substring(2, str.length() - 2)); str = "Erster Satz. Zweiter Satz."; int position = str.indexOf(".") + 1; System.out.println(str.substring(0, position));
String#toLowerCase / String#toUpperCase
Mit diesen beiden Methoden kann ein String
komplett in Groß- oder Kleinbuchstaben gewandelt werden. Der manipulierte String
wird zurückgegeben.
String s = "Der Satzanfang und die Nomen werden groß geschrieben!"; System.out.println(s + "/" + s.toLowerCase() + "/" + s.toUpperCase());
String#split
Verteilt die Zeichenkette anhand eines regulären Ausdrucks in ein Array.
String s = "3 Männer pflücken 10 Blumen für Ihre 5 Kinder"; String[] arr = s.split("[0-9]"); System.out.println("Geteilt an jeder Ziffer:"); for (int i = 0; i < arr.length; i++) { System.out.println(arr[i]); } arr = s.split(" "); System.out.println("Geteilt an jedem Leerzeichen:"); for (int i = 0; i < arr.length; i++) { System.out.println(arr[i]); }
Im Beispiel String#split
fehlt bei der ersten for Schleife in der Mitte das „i“
for (int i = 0; < arr.length; i++) {
statt
for (int i = 0; i < arr.length; i++) {
Hallo RolandF,
vielen Dank für den Hinweis. Ich habe es sofort ausgebessert!
Gruß
Stefan
Beispiel split:
Ich wunderte mich, dass die erste Ausgabe folgendes ist:
Männer pflücken
Blumen für Ihre
Kinder
Klar, Java trennt an jedem Vorkommen von [0-9], daher die beiden Leerzeichen.
Für diesen Fall sollte man doch besser ‚Ziffer‘ statt ‚Zahl‘ verwenden. Ändert man hier in dem Beispiel das erste das [0-9] mit [0-9]+ (suche nach Zahlen bestehend aus mindestens einer Ziffer), so erhält man:
Männer pflücken
Blumen für Ihre
Kinder
Zu beachten ist, dass jetzt bei dieser Ausgabe die erste Leerzeile erhalten bleibt.
Hallo Thomas,
da haben Sie recht. Ziffer ist besser gewählt als Zahl. Ich habe den Artikel schon ausgebessert.
Gruß
Stefan
Wieso ist es für Java Entwickler so Wichtig den Ausdruck „Methode“ zu benutzen und nicht den Traditionellen Begriff „Funktion“?
Hallo Tokra,
in objektorientierten Programmiersprachen spricht man meistens von Methoden. Die Begriffe „Funktion“ oder „Prozedur“ stammen meist aus nicht objektorientierten Sprachen, können aber je nach Sprache unterschiedlich definiert sein. Allgemein handelt es sich meistens um eine Funktion, wenn ein Wert zurückgegeben werden kann. Je nach Programmiersprache werden die übergebenen Parameter in einer Funktion auch nicht manipuliert. Eine Prozedur hat in der Regel keinen Rückgabewert, verändert dafür aber die übergebenen Parameter.
Grüße
Stefan