Special Characters
Kurz: Zeichen in einem String-Literal, die eine besondere Bedeutung haben und deshalb mit einem Backslash “escaped” werden müssen — z. B. \n (Zeilenumbruch), \t (Tabulator), \" (Anführungszeichen im String).
Genauer: Ohne Escaping wäre z. B. ein Anführungszeichen innerhalb eines Strings nicht von dessen Ende zu unterscheiden: "Er sagte \"Hallo\"". Ein wörtlicher Backslash braucht ebenfalls ein Escaping (\\), da ein einzelner Backslash sonst als Beginn einer Escape-Sequenz interpretiert wird.
Im Detail
System.out.println("Zeile 1\nZeile 2"); // Zeilenumbruch
System.out.println("Name\tAlter"); // Tabulator
System.out.println("Er sagte \"Hallo\""); // Anführungszeichen im String
System.out.println("C:\\Nutzer\\Dokument.txt"); // wörtlicher Backslash
System.out.println("Unicode: \u00e4"); // ä über Unicode-EscapeDie wichtigsten Escape-Sequenzen in Java: \n (Zeilenumbruch), \t (Tabulator), \" (doppeltes Anführungszeichen), \' (einfaches Anführungszeichen), \\ (Backslash) und \uXXXX (ein beliebiges Unicode-Zeichen über seinen vierstelligen Hex-Code). Seit Java 15 gibt es zusätzlich Text-Blöcke ("""..."""), die mehrzeiligen Text ohne \n-Escapes und ohne Escaping von normalen Anführungszeichen erlauben — praktisch für eingebettetes HTML, JSON oder SQL direkt im Code:
String html = """
<html>
<body>Hallo</body>
</html>
""";Ein häufiger Anfängerfehler: einen Dateipfad unter Windows als "C:\Nutzer\Dokument.txt" zu schreiben — der Compiler interpretiert \N, \D als ungültige Escape-Sequenzen und meldet einen Fehler, weil jeder einzelne Backslash verdoppelt werden muss.
Weitere Escape-Sequenzen
Neben den gebräuchlichen gibt es noch \b (Backspace), \f (Seitenvorschub, heute praktisch ungenutzt), \r (Wagenrücklauf — unter Windows zusammen mit \n als Zeilenende üblich) und \0 (Null-Zeichen). Ein Zeilenumbruch, der auf allen Betriebssystemen korrekt aussieht, wird deshalb oft nicht als \n fest verdrahtet, sondern über System.lineSeparator() bezogen, da Windows intern \r\n erwartet, Unix-artige Systeme nur \n.
Escaping in RegEx vs. Strings — zwei Ebenen gleichzeitig
Ein besonders verwirrender Fall entsteht, wenn ein regulärer Ausdruck als String-Literal geschrieben wird: RegEx hat SEIN EIGENES Escaping (z. B. \d für eine Ziffer, \. für einen wörtlichen Punkt), das UNABHÄNGIG vom String-Escaping der Java-Syntax existiert. Ein Punkt, der in einem RegEx wörtlich gemeint ist, muss deshalb doppelt escaped werden — einmal für Java, einmal für die RegEx-Engine:
String pattern = "\\d+\\.\\d+"; // Java-String: \d+\.\d+ | RegEx: eine Zahl mit Dezimalpunkt
boolean istZahl = "3.14".matches(pattern); // trueSeit Java 15 helfen Text-Blöcke genau hier: Da sie normale Anführungszeichen nicht escapen müssen, bleibt zumindest diese eine Ebene der Verschachtelung weg, auch wenn \d weiterhin die RegEx-eigene Bedeutung behält.