Java String-Methoden
Referenz der wichtigsten Java String-Methoden: length, charAt, substring, indexOf, replace, split, toUpperCase, trim und mehr.
Die Klasse String enthält Dutzende von Methoden. Dieses Kapitel ist eine praktische Referenz der am häufigsten verwendeten Methoden, gruppiert nach ihrer Funktion: Untersuchen, Vergleichen, Suchen, Zerlegen, Transformieren, Teilen/Verbinden, Konvertieren und Formatieren.
Wichtig: Strings sind unveränderlich (immutable). Jede der folgenden Methoden gibt einen neuen String (oder einen anderen Wert) zurück — sie ändert den String nicht, auf dem sie aufgerufen wurde. Das bedeutet, ein Aufruf wie s.toUpperCase(); allein bewirkt nichts Nützliches; du musst das Ergebnis speichern:
String s = "hello";
s.toUpperCase(); // result discarded — s is still "hello"
s = s.toUpperCase(); // s is now "HELLO"Indizes sind nullbasiert und zählen UTF-16-Code-Einheiten, nicht benutzerseitig wahrgenommene Zeichen — das ist relevant für Emojis und andere ergänzende Zeichen.
Einen String untersuchen
| Methode | Rückgabewert |
|---|---|
length() | Anzahl der UTF-16-Code-Einheiten |
isEmpty() | true, wenn die Länge 0 ist |
isBlank() (Java 11+) | true, wenn die Länge 0 ist oder nur Leerzeichen enthält |
charAt(int i) | das Zeichen am Index i |
codePointAt(int i) | der Unicode-Codepunkt am Index i |
"hello".length(); // 5
"".isEmpty(); // true
" ".isBlank(); // true
"hello".charAt(1); // 'e'Strings vergleichen
| Methode | Rückgabewert |
|---|---|
equals(other) | true, wenn der Inhalt gleich ist |
equalsIgnoreCase(other) | Gleichheit ohne Berücksichtigung der Groß-/Kleinschreibung |
compareTo(other) | negativ / 0 / positiv für lexikografische Reihenfolge |
compareToIgnoreCase(other) | dasselbe, ohne Berücksichtigung der Groß-/Kleinschreibung |
"hi".equals("hi"); // true
"HI".equalsIgnoreCase("hi"); // true
"apple".compareTo("banana"); // negativeFür den Inhaltsvergleich solltest du stets .equals() statt == verwenden (Vergleichsoperatoren). == vergleicht Objekt-Referenzen — ob zwei Variablen auf dasselbe Objekt zeigen — nicht die enthaltenen Zeichen. Da Java String-Literale intern hält (internt), scheint == manchmal zu funktionieren, schlägt aber fehl, sobald ein String zur Laufzeit erstellt wird:
String a = "hi";
String b = "hi";
String c = new String("hi");
a == b; // true — both point to the same interned literal
a == c; // false — c is a different object
a.equals(c); // true — same contentscompareTo eignet sich zum Sortieren: Es gibt eine negative Zahl, null oder eine positive Zahl zurück und lässt sich direkt in Collections.sort oder Comparator-Ketten einsetzen.
Suchen
| Methode | Rückgabewert |
|---|---|
contains(seq) | true, wenn seq irgendwo vorkommt |
indexOf(seq) | erster Index, an dem seq beginnt, oder -1 |
indexOf(seq, fromIndex) | dasselbe, beginnend ab fromIndex |
lastIndexOf(seq) | letzter Index, an dem seq beginnt, oder -1 |
startsWith(prefix) | true, wenn der String mit prefix beginnt |
endsWith(suffix) | true, wenn der String mit suffix endet |
String s = "abc-xyz-abc";
s.contains("xyz"); // true
s.indexOf("abc"); // 0
s.lastIndexOf("abc"); // 8
s.startsWith("abc"); // true
s.endsWith("xyz"); // falseZerlegen (Slicing)
| Methode | Rückgabewert |
|---|---|
substring(start) | vom Index start bis zum Ende |
substring(start, end) | von start (einschließlich) bis end (ausschließlich) |
String s = "Hello, World!";
s.substring(7); // "World!"
s.substring(7, 12); // "World"Negative Indizes sind nicht erlaubt — sie werfen eine StringIndexOutOfBoundsException.
Transformieren
| Methode | Rückgabewert |
|---|---|
toUpperCase() | Kopie in Großbuchstaben |
toLowerCase() | Kopie in Kleinbuchstaben |
trim() | Kopie ohne führende/nachfolgende ASCII-Leerzeichen |
strip() (Java 11+) | Kopie ohne führende/nachfolgende Unicode-Leerzeichen |
replace(old, new) | jedes literal übereinstimmende Vorkommen ersetzt |
replaceAll(regex, replacement) | Regex-basierter Ersatz |
replaceFirst(regex, replacement) | Regex, nur erste Übereinstimmung |
repeat(n) (Java 11+) | der String n-mal wiederholt |
concat(other) | identisch mit s + other |
" hello ".strip(); // "hello"
"banana".replace("a", "_"); // "b_n_n_"
"hello".repeat(3); // "hellohellohello"
"abc 123".replaceAll("\\d", "*"); // "abc ***"Teilen und Verbinden
| Methode | Rückgabewert |
|---|---|
split(regex) | Array von Teilstrings |
split(regex, limit) | dasselbe, aber auf limit Teile begrenzt |
String.join(sep, parts...) | statische Methode — verbindet mit Trennzeichen |
chars() | IntStream der UTF-16-Code-Einheiten |
lines() (Java 11+) | Stream<String> der Zeilen |
"a,b,c".split(","); // ["a","b","c"]
String.join("-", "a", "b", "c"); // "a-b-c"
String.join(",", List.of("a","b")); // "a,b"
"line1\nline2\nline3".lines().count(); // 3split erwartet einen Regex, keinen einfachen String — daher müssen Regex-Metazeichen maskiert werden: Verwende split("\\.") zum Aufteilen an einem wörtlichen Punkt, nicht split(".") (das jedes Zeichen trifft und ein leeres Array zurückgibt). Abschließende leere Strings werden standardmäßig weggelassen; übergib ein negatives limit (z. B. split(",", -1)), um sie beizubehalten.
Konvertierung
| Methode | Rückgabewert |
|---|---|
toCharArray() | char[] der Zeichen des Strings |
getBytes() | UTF-8-Byte-Array (oder Plattformkodierung, je nach Überladung) |
String.valueOf(any) | statisch — konvertiert jeden Wert in einen String |
Integer.parseInt(s) | parst einen String in einen int |
Double.parseDouble(s) | parst einen String in einen double |
Boolean.parseBoolean(s) | parst einen String in einen boolean |
String.valueOf(42); // "42"
Integer.parseInt("42"); // 42
Double.parseDouble("3.14"); // 3.14
"hello".toCharArray(); // {'h','e','l','l','o'}Die parse*-Methoden werfen eine NumberFormatException, wenn der Text keine gültige Zahl ist — umschließe Benutzereingaben daher mit try/catch oder validiere sie vorher. Anders als parseInt ist String.valueOf(null) sicher — es gibt den String "null" zurück, anstatt eine Ausnahme zu werfen.
Formatierung
| Methode | Rückgabewert |
|---|---|
String.format(fmt, args...) | statisch — printf-ähnlich formatierter String |
formatted(args...) (Java 15+) | Instanzmethode, entspricht format mit this als fmt |
String.format("%s is %d", "Ada", 36); // "Ada is 36"
"%s is %d".formatted("Ada", 36); // "Ada is 36"Eine kombinierte Demonstration
Was kommt als nächstes
Java String-Verkettung erläutert +, concat und StringBuilder im Detail — einschließlich der Frage, wann welches Mittel das richtige ist.