Strings in Java
Alles über Strings in Java: Methoden, Vergleiche, StringBuilder, Text Blocks und formatierte Ausgaben. Mit vielen praktischen Beispielen.
Strings in Java
Strings (Zeichenketten) sind der meistverwendete Datentyp in Java. Ob Benutzernamen, E-Mails, JSON-Daten oder Fehlermeldungen — ueberall begegnest du Strings. In diesem Kapitel lernst du alles, was du ueber Strings wissen musst.
Strings erstellen
// String-Literal (empfohlen)
String name = "Max Mustermann";
// Mit var
var stadt = "Berlin";
// Leerer String
var leer = "";
// String aus char-Array
char[] zeichen = {'J', 'a', 'v', 'a'};
var text = new String(zeichen); // "Java"
Strings sind unveraenderlich (immutable)
Das ist eines der wichtigsten Konzepte: Strings in Java koennen nicht veraendert werden. Jede “Aenderung” erzeugt einen neuen String:
var name = "Max";
name = name + " Mustermann"; // Neuer String wird erzeugt!
// Der alte String "Max" wird vom Garbage Collector entfernt
Das ist anders als in vielen anderen Sprachen und hat Auswirkungen auf die Performance (dazu spaeter mehr mit StringBuilder).
Die wichtigsten String-Methoden
Laenge und Zugriff
var text = "Hallo Java!";
text.length(); // 11 -- Laenge des Strings
text.charAt(0); // 'H' -- Zeichen an Position 0
text.charAt(6); // 'J' -- Zeichen an Position 6
text.isEmpty(); // false -- Ist der String leer?
text.isBlank(); // false -- Ist der String leer oder nur Leerzeichen?
Suchen und Pruefen
var text = "Hallo Java Welt!";
text.contains("Java"); // true
text.startsWith("Hallo"); // true
text.endsWith("Welt!"); // true
text.indexOf("Java"); // 6 (Position)
text.indexOf("Python"); // -1 (nicht gefunden)
text.lastIndexOf("l"); // 14 (letzte Position)
Gross-/Kleinschreibung
var text = "Hallo Welt";
text.toUpperCase(); // "HALLO WELT"
text.toLowerCase(); // "hallo welt"
Teilstrings
var text = "Hallo Java Welt";
text.substring(6); // "Java Welt" -- ab Position 6
text.substring(6, 10); // "Java" -- von Position 6 bis 10 (exklusiv)
Ersetzen und Trimmen
var text = " Hallo Welt ";
text.trim(); // "Hallo Welt" -- Leerzeichen am Rand entfernen
text.strip(); // "Hallo Welt" -- wie trim, aber Unicode-aware
var satz = "Java ist toll. Java ist cool.";
satz.replace("Java", "Python"); // "Python ist toll. Python ist cool."
satz.replaceFirst("Java", "Python"); // "Python ist toll. Java ist cool."
Aufteilen und Zusammenfuegen
// String aufteilen
var csv = "Max,25,Berlin,Student";
String[] teile = csv.split(",");
// teile = ["Max", "25", "Berlin", "Student"]
// Strings zusammenfuegen
var zusammen = String.join(", ", "Max", "Anna", "Leo");
// "Max, Anna, Leo"
var namen = List.of("Max", "Anna", "Leo");
var verbunden = String.join(" und ", namen);
// "Max und Anna und Leo"
String-Vergleiche — WICHTIG!
equals() statt ==
Das ist eine der haeufigsten Fehlerquellen in Java:
var a = "Hallo";
var b = "Hallo";
var c = new String("Hallo");
// == vergleicht die REFERENZ (Speicheradresse)
System.out.println(a == b); // true (gleicher String-Pool-Eintrag)
System.out.println(a == c); // false (verschiedene Objekte!)
// equals() vergleicht den INHALT
System.out.println(a.equals(b)); // true
System.out.println(a.equals(c)); // true
Regel: Verwende immer equals() zum Vergleichen von Strings!
equalsIgnoreCase()
var eingabe = "JaVa";
System.out.println(eingabe.equals("java")); // false
System.out.println(eingabe.equalsIgnoreCase("java")); // true
compareTo()
"Apfel".compareTo("Banane"); // negativ (A < B)
"Banane".compareTo("Apfel"); // positiv (B > A)
"Apfel".compareTo("Apfel"); // 0 (gleich)
Vergleich mit Python
# Python: == vergleicht den Inhalt
a = "Hallo"
b = "Hallo"
print(a == b) # True -- Inhalt ist gleich
// Java: == vergleicht die Referenz, equals() den Inhalt
var a = new String("Hallo");
var b = new String("Hallo");
System.out.println(a == b); // false -- verschiedene Objekte!
System.out.println(a.equals(b)); // true -- gleicher Inhalt
String-Formatierung
String.format()
var name = "Max";
var alter = 25;
var note = 1.7;
var text = String.format("Name: %s, Alter: %d, Note: %.1f", name, alter, note);
System.out.println(text);
// "Name: Max, Alter: 25, Note: 1.7"
Formatted (seit Java 15)
var text = "Name: %s, Alter: %d".formatted("Max", 25);
System.out.println(text);
// "Name: Max, Alter: 25"
printf()
System.out.printf("%-20s %5d %8.2f%n", "Produkt", 42, 9.99);
System.out.printf("%-20s %5d %8.2f%n", "Langes Produkt", 3, 149.99);
Ausgabe:
Produkt 42 9.99
Langes Produkt 3 149.99
Text Blocks (seit Java 15)
Text Blocks sind mehrzeilige Strings — super praktisch fuer HTML, JSON oder SQL:
// Ohne Text Blocks (muehsam)
var html = "<html>\n" +
" <body>\n" +
" <h1>Hallo!</h1>\n" +
" </body>\n" +
"</html>";
// Mit Text Blocks (viel besser!)
var htmlBlock = """
<html>
<body>
<h1>Hallo!</h1>
</body>
</html>
""";
JSON-Beispiel
var json = """
{
"name": "Max",
"alter": 25,
"stadt": "Berlin"
}
""";
SQL-Beispiel
var sql = """
SELECT name, alter, stadt
FROM studenten
WHERE alter > 20
ORDER BY name
""";
StringBuilder — Fuer viele String-Operationen
Wenn du viele Strings zusammenfuegen musst, verwende StringBuilder. Das ist viel effizienter als +:
// LANGSAM: Jedes + erzeugt einen neuen String
var ergebnis = "";
for (int i = 0; i < 10000; i++) {
ergebnis += i + ", "; // 10.000 neue String-Objekte!
}
// SCHNELL: StringBuilder aendert den internen Puffer
var sb = new StringBuilder();
for (int i = 0; i < 10000; i++) {
sb.append(i).append(", ");
}
var ergebnis = sb.toString();
StringBuilder-Methoden
var sb = new StringBuilder("Hallo");
sb.append(" Welt"); // "Hallo Welt"
sb.insert(5, ","); // "Hallo, Welt"
sb.delete(5, 6); // "Hallo Welt"
sb.replace(6, 10, "Java"); // "Hallo Java"
sb.reverse(); // "avaJ ollaH"
var ergebnis = sb.toString(); // Zurueck zum String
Praktische Beispiele
E-Mail-Validierung (einfach)
public static boolean istGueltigeEmail(String email) {
return email != null
&& email.contains("@")
&& email.contains(".")
&& email.indexOf("@") < email.lastIndexOf(".")
&& !email.startsWith("@")
&& !email.endsWith(".");
}
Wort-Zaehler
public static int zaehleWoerter(String text) {
if (text == null || text.isBlank()) {
return 0;
}
return text.strip().split("\\s+").length;
}
var text = "Java ist eine tolle Sprache";
System.out.println(zaehleWoerter(text)); // 5
Palindrom-Pruefung
public static boolean istPalindrom(String text) {
var bereinigt = text.toLowerCase().replaceAll("[^a-z]", "");
return bereinigt.equals(new StringBuilder(bereinigt).reverse().toString());
}
System.out.println(istPalindrom("Anna")); // true
System.out.println(istPalindrom("Regal-Lager")); // true
System.out.println(istPalindrom("Java")); // false
String-Methoden Uebersicht
| Methode | Beschreibung | Beispiel |
|---|---|---|
length() | Laenge | "Hallo".length() -> 5 |
charAt(i) | Zeichen an Position i | "Hallo".charAt(0) -> 'H' |
equals(s) | Inhalt vergleichen | "a".equals("a") -> true |
contains(s) | Enthaelt Teilstring? | "Hallo".contains("all") -> true |
substring(a,b) | Teilstring | "Hallo".substring(0,3) -> "Hal" |
replace(a,b) | Ersetzen | "Hallo".replace("l","r") -> "Harro" |
split(regex) | Aufteilen | "a,b,c".split(",") -> ["a","b","c"] |
trim()/strip() | Leerzeichen entfernen | " Hi ".strip() -> "Hi" |
toUpperCase() | Grossbuchstaben | "hi".toUpperCase() -> "HI" |
formatted(args) | Formatierung | "%s: %d".formatted("x",5) -> "x: 5" |
Uebungen
Uebung 1: String umkehren
Schreibe eine Methode umkehren(String text), die einen String umkehrt — einmal mit StringBuilder und einmal mit einer for-Schleife.
Uebung 2: Vokale zaehlen
Schreibe eine Methode, die die Anzahl der Vokale (a, e, i, o, u) in einem String zaehlt.
Uebung 3: CSV-Parser
Schreibe ein Programm, das folgende CSV-Zeile parst und formatiert ausgibt:
"Max Mustermann,25,Berlin,Student"
Uebung 4: Passwort-Checker
Schreibe eine Methode, die prueft, ob ein Passwort mindestens 8 Zeichen lang ist, mindestens eine Ziffer und mindestens einen Grossbuchstaben enthaelt.
Was kommt als Naechstes?
In der naechsten Lektion lernst du alle Operatoren in Java kennen — arithmetische, logische, Vergleichs- und Zuweisungsoperatoren. Damit kannst du Berechnungen durchfuehren und Bedingungen formulieren.
Zusammenfassung
- Strings sind unveraenderlich (immutable) in Java
- Verwende
equals()zum Vergleichen, nicht== - Text Blocks (
"""...""") machen mehrzeilige Strings einfach - StringBuilder ist effizienter fuer viele String-Verknuepfungen
String.format()und.formatted()bieten formatierte Ausgaben- Methoden wie
contains(),split(),replace()undsubstring()sind deine Werkzeuge strip()ist die moderne Alternative zutrim()(Unicode-aware)
Pro-Tipp: Die .formatted()-Methode (seit Java 15) ist oft eleganter als String.format(). Statt String.format("Hallo %s!", name) schreibe einfach "Hallo %s!".formatted(name). Das liest sich natuerlicher und spart eine statische Methode. In IntelliJ kannst du uebrigens mit Ctrl + Q die Dokumentation jeder String-Methode nachschlagen!