Java 17: Text Block
Der Text-Block ist vorgesehen für Fälle, in denen ein String-Literal definiert werden soll das mehrere Zeilen -- getrennt durch den System-Zeilen-Trenner -- enthalten soll.
Gezeigt wird hier die einfachste Anwendung. Wer tiefer in's Detail gehen mag, sei auf die JavaSpec und das Internet verwiesen.
In Java Version <= 16 sieht das in der Regel so aus:
void oldStyle() { String text = "{\n" + // " \"name\": \"Alfred Döblin\",\n" + // " \"alter\": 79,\n" + // " \"ort\": \"Berlin Alexanderplatz\"\n" + // "}"; System.out.println(text); }
Um den Formatter davon abzuhalten die Zeilen zusammenzutackern, werden die Enden mit //
-Kommentaren geschützt.
Der Mix aus Anführungszeichen und Backslashes trägt nicht unwesentlich zur Unlesbarkeit bei...
So sieht das nun mit einem Text-Block aus -- das Ergebnis ist identisch:
void newStyleNoIndentation() { String text = """ { name: Alfred Döblin, alter: 79, ort: Berlin Alexanderplatz } """; System.out.println(text); }
Der Text-Block beginnt mit dreifachen Anführungszeichen und endet auch so. Innerhalb des Text-Block ist die Verwendung von Anführungszeichen ohne Backslash davor möglich.
In der ersten Variante war es notwendig, die Zeilen durch das vorangehende Anführungszeichen in jeder Zeile vor weiterer Einrückung zu schützen. Beim Text-Block ist das nicht erforderlich, der vorangehende Leerraum wird bei der Ausgabe verschluckt -- warum?
Betrachten wir die Ausgabe dieser Methode:
void newStyleNoIndentation() { String text = """ { name: Alfred Döblin, alter: 79, ort: Berlin Alexanderplatz } """; System.out.println(text); }
Jede Zeile der Ausgabe ist nun um zwei Leerzeichen nach rechts eingerückt. Java bestimmt das anhand der negativen Einrückung der abschließenden Triple-Gänsefüße. Je weiter wir den Abschuß nach links schieben, umso weiter schiebt sich die Ausgabe nach rechts.