Zum Inhalt springen
Java Anfänger 30 min

Strings in Java

Alles über Strings in Java: Methoden, Vergleiche, StringBuilder, Text Blocks und formatierte Ausgaben. Mit vielen praktischen Beispielen.

Aktualisiert:

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

MethodeBeschreibungBeispiel
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() und substring() sind deine Werkzeuge
  • strip() ist die moderne Alternative zu trim() (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!

Zurück zum Java Kurs