{"id":27054,"date":"2022-01-19T14:10:00","date_gmt":"2022-01-19T13:10:00","guid":{"rendered":"https:\/\/www.happycoders.eu\/?p=27054"},"modified":"2025-06-12T09:02:45","modified_gmt":"2025-06-12T07:02:45","slug":"java-text-blocks","status":"publish","type":"post","link":"https:\/\/www.happycoders.eu\/de\/java\/java-text-blocks\/","title":{"rendered":"Java Text Blocks"},"content":{"rendered":"\n<p>In <a href=\"\/de\/java\/java-15-features\/\">Java 15<\/a> wurden im Rahmen von <a href=\"https:\/\/openjdk.org:443\/projects\/amber\/\" target=\"_blank\" rel=\"noreferrer noopener\">Project Amber<\/a> Text Blocks (mehrzeilige Strings) eingef\u00fchrt.<\/p>\n\n\n\n<p>In diesem Artikel erf\u00e4hrst du:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Warum brauchen wir Text Blocks?<\/li>\n\n\n\n<li>Wie notiert man Text Blocks in Java?<\/li>\n\n\n\n<li>Wie muss ein Text Block einger\u00fcckt werden?<\/li>\n\n\n\n<li>Welche Escape-Sequenzen kann bzw. muss man im Text Block verwenden?<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\" class=\"wp-block-heading\" id=\"mehrzeilige-strings-in-java\">Mehrzeilige Strings in Java<\/h2>\n\n\n\n<p>Wenn wir vor Java 15 einen mehrzeiligen String notieren wollten, sah das in der Regel so aus:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-2\" data-shcb-language-name=\"Java\" data-shcb-language-slug=\"java\"><span><code class=\"hljs language-java\">String sql =\n    <span class=\"hljs-string\">\"  SELECT id, firstName, lastName\\n\"<\/span>\n        + <span class=\"hljs-string\">\"    FROM Employee\\n\"<\/span>\n        + <span class=\"hljs-string\">\"   WHERE departmentId = \\\"IT\\\"\\n\"<\/span>\n        + <span class=\"hljs-string\">\"ORDER BY lastName, firstName\"<\/span>;\n\nString html =\n    <span class=\"hljs-string\">\"&lt;html&gt;\\n\"<\/span>\n        + <span class=\"hljs-string\">\"  &lt;body&gt;\\n\"<\/span>\n        + <span class=\"hljs-string\">\"    &lt;p&gt;Hello World!&lt;\/p&gt;\\n\"<\/span>\n        + <span class=\"hljs-string\">\"  &lt;\/body&gt;\\n\"<\/span>\n        + <span class=\"hljs-string\">\"&lt;\/html&gt;\"<\/span>;<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-2\"><span class=\"shcb-language__label\">Code-Sprache:<\/span> <span class=\"shcb-language__name\">Java<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">java<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Zeilenumbr\u00fcche und Anf\u00fchrungszeichen mussten wir durch Escape-Sequenzen (<code>\\n<\/code> und <code>\\\"<\/code>) ersetzen. Und um den String einigerma\u00dfen leserlich auf mehrere Zeilen aufzuteilen, mussten wir ihn unterteilen und mit <code>+<\/code> wieder konkatenieren. Schlimm war das nicht (da der Compiler wieder einen einzigen String daraus machte) aber sch\u00f6n war es auch nicht.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" class=\"wp-block-heading\" id=\"text-block-notation\">Text Block Notation <\/h2>\n\n\n\n<p>Ab Java 15 k\u00f6nnen wir mehrzeilige Strings als \"Text Blocks\" notieren:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-3\" data-shcb-language-name=\"Java\" data-shcb-language-slug=\"java\"><span><code class=\"hljs language-java\">String sql = <span class=\"hljs-string\">\"\"<\/span><span class=\"hljs-string\">\"\n      SELECT id, firstName, lastName\n        FROM Employee\n       WHERE departmentId = \"<\/span>IT<span class=\"hljs-string\">\"\n    ORDER BY lastName, firstName\"<\/span><span class=\"hljs-string\">\"\"<\/span>;\n\nString html = <span class=\"hljs-string\">\"\"<\/span><span class=\"hljs-string\">\"\n    &lt;html&gt;\n      &lt;body&gt;\n        &lt;p&gt;Hello World!&lt;\/p&gt;\n      &lt;\/body&gt;\n    &lt;\/html&gt;\"<\/span><span class=\"hljs-string\">\"\"<\/span>;<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-3\"><span class=\"shcb-language__label\">Code-Sprache:<\/span> <span class=\"shcb-language__name\">Java<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">java<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Der Textblock startet und endet mit jeweils drei Anf\u00fchrungszeichen. Es gelten folgende Regeln:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Hinter den <em>startenden<\/em> Anf\u00fchrungszeichen muss ein Zeilenumbruch folgen; dieser wird nicht Teil des Strings.<\/li>\n\n\n\n<li>Wenn vor den <em>endenden<\/em> Anf\u00fchrungszeichen ein Zeilenumbruch erfolgt, ist dieser Zeilenumbruch Teil des Strings.<\/li>\n\n\n\n<li>Innerhalb des Textblocks m\u00fcssen einzelne oder doppelte Anf\u00fchrungszeichen nicht escaped werden, d\u00fcrfen aber (wobei SCA-Tools wie SonarLint empfehlen es nicht zu tun).<\/li>\n\n\n\n<li>M\u00f6chtest du mehr als zwei Anf\u00fchrungszeichen schreiben, musst du jedes dritte davon escapen.<\/li>\n<\/ul>\n\n\n\n<p>Eine der ersten Fragen, die Entwicklerinnen und Entwickler sich stellen ist: <\/p>\n\n\n\n<h3 class=\"wp-block-heading\" class=\"wp-block-heading\" id=\"wie-weit-muss-der-textblock-eingerueckt-werden\">Wie weit muss der Textblock einger\u00fcckt werden?<\/h3>\n\n\n\n<p>Die Antwort ist: es ist egal.<\/p>\n\n\n\n<p>Der Textblock beginnt bei demjenigen Zeichen, das am weitesten links steht (im ersten Beispiel oben bei dem \"O\" von \"ORDER BY\" bzw. im zweiten Beispiel bei den spitzen Klammern in der ersten und letzten Zeile).<\/p>\n\n\n\n<p>Die folgenden drei Notationen f\u00fchren alle zu demselben Ergebnis:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-4\" data-shcb-language-name=\"Java\" data-shcb-language-slug=\"java\"><span><code class=\"hljs language-java\">    String sql1 = <span class=\"hljs-string\">\"\"<\/span><span class=\"hljs-string\">\"\n          SELECT id, firstName, lastName\n            FROM Employee\n           WHERE departmentId = \"<\/span>IT<span class=\"hljs-string\">\"\n        ORDER BY lastName, firstName\"<\/span><span class=\"hljs-string\">\"\"<\/span>;\n\n    String sql2 = <span class=\"hljs-string\">\"\"<\/span><span class=\"hljs-string\">\"\n                   SELECT id, firstName, lastName\n                     FROM Employee\n                    WHERE departmentId = \"<\/span>IT<span class=\"hljs-string\">\"\n                 ORDER BY lastName, firstName\"<\/span><span class=\"hljs-string\">\"\"<\/span>;\n\n    String sql3 = <span class=\"hljs-string\">\"\"<\/span><span class=\"hljs-string\">\"\n  SELECT id, firstName, lastName\n    FROM Employee\n   WHERE departmentId = \"<\/span>IT<span class=\"hljs-string\">\"\nORDER BY lastName, firstName\"<\/span><span class=\"hljs-string\">\"\"<\/span>;<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-4\"><span class=\"shcb-language__label\">Code-Sprache:<\/span> <span class=\"shcb-language__name\">Java<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">java<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Alle drei Strings haben \u2013 unabh\u00e4ngig von der Einr\u00fcckung im Quellcode \u2013 den folgenden Inhalt:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-5\" data-shcb-language-name=\"Klartext\" data-shcb-language-slug=\"plaintext\"><span><code class=\"hljs language-plaintext\">  SELECT id, firstName, lastName\n    FROM Employee\n   WHERE departmentId = \"IT\"\nORDER BY lastName, firstName<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-5\"><span class=\"shcb-language__label\">Code-Sprache:<\/span> <span class=\"shcb-language__name\">Klartext<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">plaintext<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Moderne IDEs geben uns hier eine Hilfestellung, in dem sie den linken Rand des Textblocks anzeigen (IntelliJ durch eine gr\u00fcne Linie):<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-half_400\"><img decoding=\"async\" width=\"400\" height=\"364\" src=\"https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/01\/java-text-blocks-intellij-400x364.png\" alt=\"Darstellung des linken Randes von Java-Textbl\u00f6cken in IntelliJ\" class=\"wp-image-27075\" srcset=\"https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/01\/java-text-blocks-intellij-400x364.png 400w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/01\/java-text-blocks-intellij-224x204.png 224w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/01\/java-text-blocks-intellij-336x306.png 336w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/01\/java-text-blocks-intellij-504x459.png 504w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/01\/java-text-blocks-intellij-672x612.png 672w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/01\/java-text-blocks-intellij-600x546.png 600w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/01\/java-text-blocks-intellij.png 800w\" sizes=\"(max-width: 400px) 100vw, 400px\" \/><figcaption class=\"wp-element-caption\">Darstellung des linken Randes von Java-Textbl\u00f6cken in IntelliJ<\/figcaption><\/figure>\n<\/div>\n\n\n<p>Was aber, wenn man einen Textblock erstellen m\u00f6chte, der einger\u00fcckt ist?<\/p>\n\n\n\n<p>Daf\u00fcr gibt es einen Trick: Du f\u00fcgst vor den abschlie\u00dfenden Anf\u00fchrungszeichen einen Zeilenumbruch ein und setzt die Anf\u00fchrungszeichen an die Stelle, an der der Textblock beginnen soll, z. B. so:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-6\" data-shcb-language-name=\"Java\" data-shcb-language-slug=\"java\"><span><code class=\"hljs language-java\">String sql = <span class=\"hljs-string\">\"\"<\/span><span class=\"hljs-string\">\"\n      SELECT id, firstName, lastName\n        FROM Employee\n       WHERE departmentId = \"<\/span>IT<span class=\"hljs-string\">\"\n    ORDER BY lastName, firstName\n  \"<\/span><span class=\"hljs-string\">\"\"<\/span>;<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-6\"><span class=\"shcb-language__label\">Code-Sprache:<\/span> <span class=\"shcb-language__name\">Java<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">java<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Der Textblock ist nun um zwei Zeichen einger\u00fcckt.<\/p>\n\n\n\n<p>Allerdings hat er am Ende auch einen Zeilenumbruch. Diesen k\u00f6nnen wir mit einer Escape-Sequenz wieder entfernen. Escape-Sequenzen werden im folgenden Kapitel behandelt.<\/p>\n\n\n<div class=\"convertkit-form wp-block-convertkit-form\" style=\"\"><script async data-uid=\"1427197203\" src=\"https:\/\/happycoders.kit.com\/1427197203\/index.js\" data-jetpack-boost=\"ignore\" data-no-defer=\"1\" data-no-optimize=\"1\" nowprocket><\/script><\/div>\n\n\n\n<h2 class=\"wp-block-heading\" class=\"wp-block-heading\" id=\"escape-sequenzen-in-text-blocks\">Escape-Sequenzen in Text Blocks<\/h2>\n\n\n\n<p>Text Blocks haben den Vorteil, dass die in Strings am h\u00e4ufigsten verwendeten Escape-Sequenzen, n\u00e4mlich <code>\\\"<\/code> f\u00fcr Anf\u00fchrungszeichen und <code>\\n<\/code> f\u00fcr einen Zeilenumbruch nicht mehr ben\u00f6tigt werden.<\/p>\n\n\n\n<p>Stattdessen gibt es zwei neue Escape-Sequenzen: <\/p>\n\n\n\n<h3 class=\"wp-block-heading\" class=\"wp-block-heading\" id=\"escape-sequenz-backslash-am-zeilenende\">Escape-Sequenz: Backslash am Zeilenende<\/h3>\n\n\n\n<p>Im vorherigen Kapitel hast du gesehen, dass man einen Textblock einr\u00fccken kann, indem man vor die abschlie\u00dfenden Anf\u00fchrungzeichen einen Zeilenumbruch einf\u00fcgt. Dieser Zeilenumbruch ist dann alerdings auch im String enthalten. Um ihn zu entfernen, kannst du an das Ende der letzten Zeile einen Backslash setzen:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-7\" data-shcb-language-name=\"Java\" data-shcb-language-slug=\"java\"><span><code class=\"hljs language-java\">String sql = <span class=\"hljs-string\">\"\"<\/span><span class=\"hljs-string\">\"\n      SELECT id, firstName, lastName\n        FROM Employee\n       WHERE departmentId = \"<\/span>IT<span class=\"hljs-string\">\"\n    ORDER BY lastName, firstName\\\n  \"<\/span><span class=\"hljs-string\">\"\"<\/span>;<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-7\"><span class=\"shcb-language__label\">Code-Sprache:<\/span> <span class=\"shcb-language__name\">Java<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">java<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Der Backslash am Zeilenende sorgt daf\u00fcr, dass der String an dieser Stelle <em>keinen<\/em> Zeilenumbruch enth\u00e4lt.<\/p>\n\n\n\n<p>Diese Funktion ist nicht auf die letzte Zeile beschr\u00e4nkt \u2013 du kannst jede beliebige Zeile mit einem Backslash enden lassen, wie in folgendem Beispiel:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-8\" data-shcb-language-name=\"Java\" data-shcb-language-slug=\"java\"><span><code class=\"hljs language-java\">String sql = <span class=\"hljs-string\">\"\"<\/span><span class=\"hljs-string\">\"\n    SELECT id, firstName, lastName \\\n    FROM Employee\n    WHERE departmentId = \"<\/span>IT<span class=\"hljs-string\">\" \\\n    ORDER BY lastName, firstName\"<\/span><span class=\"hljs-string\">\"\"<\/span>;<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-8\"><span class=\"shcb-language__label\">Code-Sprache:<\/span> <span class=\"shcb-language__name\">Java<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">java<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Dieser String enth\u00e4lt somit nur noch einen Zeilenumbruch hinter \"Employee\":<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-9\" data-shcb-language-name=\"Klartext\" data-shcb-language-slug=\"plaintext\"><span><code class=\"hljs language-plaintext\">SELECT id, firstName, lastName FROM Employee\nWHERE departmentId = \"IT\" ORDER BY lastName, firstName<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-9\"><span class=\"shcb-language__label\">Code-Sprache:<\/span> <span class=\"shcb-language__name\">Klartext<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">plaintext<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Das ist dann sinnvoll, wenn du einen einzeiligen String, z. B. ein sehr langes Log-Statement, im Quellcode mehrzeilig darstellen m\u00f6chtest.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" class=\"wp-block-heading\" id=\"escape-sequenz-s\">Escape-Sequenz: \\s<\/h3>\n\n\n\n<p>Eine weitere Escape-Sequenz, mit der du einen Text-Block formatieren kannst, ist \"\\s\".<\/p>\n\n\n\n<p>Abschlie\u00dfende Leerzeichen werden standardm\u00e4\u00dfig aus jeder Zeile entfernt, wie in folgendem Beispiel (die Punkte sollen Leerzeichen darstellen):<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-10\" data-shcb-language-name=\"Java\" data-shcb-language-slug=\"java\"><span><code class=\"hljs language-java\">String text = <span class=\"hljs-string\">\"\"<\/span><span class=\"hljs-string\">\"\n    one\u00b7\u00b7\u00b7\u00b7\u00b7\n    two\u00b7\u00b7\u00b7\u00b7\u00b7\n    three\u00b7\u00b7\u00b7\"<\/span><span class=\"hljs-string\">\"\"<\/span>;\n\ntext.lines().map(line -&gt; <span class=\"hljs-string\">\"|\"<\/span> + line + <span class=\"hljs-string\">\"|\"<\/span>).forEachOrdered(System.out::println);<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-10\"><span class=\"shcb-language__label\">Code-Sprache:<\/span> <span class=\"shcb-language__name\">Java<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">java<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Die Ausgabe dieses Code-Snippets lautet:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-11\" data-shcb-language-name=\"Klartext\" data-shcb-language-slug=\"plaintext\"><span><code class=\"hljs language-plaintext\">|one|\n|two|\n|three|<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-11\"><span class=\"shcb-language__label\">Code-Sprache:<\/span> <span class=\"shcb-language__name\">Klartext<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">plaintext<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Um die Leerzeichen zu erhalten, kannst du diese durch die Escape-Sequenz \"\\s\" ersetzen:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-12\" data-shcb-language-name=\"Java\" data-shcb-language-slug=\"java\"><span><code class=\"hljs language-java\">String text = <span class=\"hljs-string\">\"\"<\/span><span class=\"hljs-string\">\"\n    one\\s\\s\\s\\s\\s\n    two\\s\\s\\s\\s\\s\n    three\\s\\s\\s\"<\/span><span class=\"hljs-string\">\"\"<\/span>;<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-12\"><span class=\"shcb-language__label\">Code-Sprache:<\/span> <span class=\"shcb-language__name\">Java<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">java<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>\u00dcbersichtlicher und v\u00f6llig ausreichend ist es, wenn wir nur das letzte Leerzeichen escapen:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-13\" data-shcb-language-name=\"Java\" data-shcb-language-slug=\"java\"><span><code class=\"hljs language-java\">String text = <span class=\"hljs-string\">\"\"<\/span><span class=\"hljs-string\">\"\n    one    \\s\n    two    \\s\n    three  \\s\"<\/span><span class=\"hljs-string\">\"\"<\/span>;<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-13\"><span class=\"shcb-language__label\">Code-Sprache:<\/span> <span class=\"shcb-language__name\">Java<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">java<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Somit gibt das Programm das gew\u00fcnschte Ergebnis aus:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-14\" data-shcb-language-name=\"Klartext\" data-shcb-language-slug=\"plaintext\"><span><code class=\"hljs language-plaintext\">|one     |\n|two     |\n|three   |<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-14\"><span class=\"shcb-language__label\">Code-Sprache:<\/span> <span class=\"shcb-language__name\">Klartext<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">plaintext<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Damit hast den den kompletten Funktionsumfang der Text Blocks kennengelernt. Viel Spa\u00df beim Einsatz!<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" class=\"wp-block-heading\" id=\"geschichte-der-text-blocks-in-java\">Geschichte der Text Blocks in Java<\/h2>\n\n\n\n<p>Text Blocks wurden erstmal durch <a rel=\"noopener\" href=\"https:\/\/openjdk.org:443\/jeps\/355\" target=\"_blank\">JDK Enhancement Proposal (JEP) 355<\/a> als Preview-Feature in <a href=\"\/de\/java\/java-13-features\/\">Java 13<\/a> vorgestellt. Sie waren ein Ersatz f\u00fcr den von der Community nicht akzeptierten und daraufhin zur\u00fcckgezogenen <a rel=\"noopener\" href=\"https:\/\/openjdk.org:443\/jeps\/326\" target=\"_blank\">JEP 326, \"Raw String Literals\"<\/a>. Falls du dich f\u00fcr die Gr\u00fcnde dahinter interessierst, du findest sie in diesem <a href=\"https:\/\/mail.openjdk.org:443\/pipermail\/jdk-dev\/2018-December\/002402.html\" target=\"_blank\" rel=\"noopener\">Beitrag von Brian Goetz in der jdk-dev-Mailingliste<\/a>.<\/p>\n\n\n\n<p>Im zweiten Preview, <a href=\"https:\/\/openjdk.org:443\/jeps\/368\" target=\"_blank\" rel=\"noopener\">JEP 368<\/a>, wurden in <a href=\"\/de\/java\/java-14-features\/\">Java 14<\/a> die o. g. Escape-Sequenzen hinzugef\u00fcgt.<\/p>\n\n\n\n<p>Aufgrund des positiven Feedbacks wurden Text Blocks in <a href=\"\/de\/java\/java-15-features\/\">Java 15<\/a> durch <a rel=\"noopener\" href=\"https:\/\/openjdk.org:443\/jeps\/378\" target=\"_blank\">JEP 378<\/a> ohne weitere \u00c4nderungen als produktionsreifes Feature ver\u00f6ffentlicht.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" class=\"wp-block-heading\" id=\"fazit\">Fazit<\/h2>\n\n\n\n<p>Textbl\u00f6cke erm\u00f6glichen es uns endlich, mehrzeilige Zeichenketten in Java-Code komfortabel zu notieren. Sie werden in dreifache Anf\u00fchrungszeichen eingeschlossen. Anf\u00fchrungszeichen und Zeilenumbr\u00fcche m\u00fcssen nicht mehr durch un\u00fcbersichtliche Escape-Sequenzen ersetzt werden.<\/p>\n\n\n\n<p>Setzt du Textbl\u00f6cke bereits ein? Wie gefallen sie dir? Hinterlasse einen Kommentar!<\/p>\n<aside><p>Wenn dir der Artikel weitergeholfen hat, w\u00fcrde ich mich sehr \u00fcber eine positive Bewertung auf meinem <a href=\"https:\/\/www.provenexpert.com\/de-de\/sven-woltmann-happycoders-eu\/7smk\/\" target=\"_blank\" rel=\"noopener\">ProvenExpert-Profil<\/a> freuen. Dein Feedback hilft mir, meine Inhalte weiter zu verbessern und motiviert mich, neue informative Artikel zu schreiben.<\/p>\r\n                        <p>\ud83d\udc49 <a href=\"https:\/\/www.provenexpert.com\/de-de\/sven-woltmann-happycoders-eu\/7smk\/\" target=\"_blank\" rel=\"noopener\">Bewertung abgeben<\/a><\/p>\r\n                        <p>Du m\u00f6chtest \u00fcber alle neue Java-Features auf dem Laufenden sein? Dann <a href=\"#\" data-formkit-toggle=\"d8ee997126\">klicke hier<\/a>, um dich f\u00fcr den HappyCoders-Newsletter anzumelden.<\/p>\r\n                        <p>\ud83d\udc49 <a href=\"#\" data-formkit-toggle=\"d8ee997126\">Newsletter-Anmeldung<\/a><\/p><\/aside>","protected":false},"excerpt":{"rendered":"<p>Text Blocks sind eine Notation f\u00fcr mehrzeilige Strings in Java. Warum brauchen wir sie? Wie schreibt und formatiert man sie? Welche Escape-Sequenzen k\u00f6nnen bzw. m\u00fcssen wir verwenden?<\/p>\n","protected":false},"author":1,"featured_media":34360,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_seopress_titles_title":"","_seopress_titles_desc":"Text Blocks sind eine Notation f\u00fcr mehrzeilige Strings in Java. Wie formatiert man sie? Welche Escape-Sequenzen k\u00f6nnen\/m\u00fcssen wir verwenden?","_seopress_robots_index":"","_seopress_robots_follow":"","_seopress_robots_imageindex":"","_seopress_robots_snippet":"","_seopress_robots_primary_cat":"none","_seopress_robots_breadcrumbs":"","_seopress_robots_freeze_modified_date":"","_seopress_robots_custom_modified_date":"","_seopress_robots_canonical":"","_seopress_social_fb_title":"","_seopress_social_fb_desc":"","_seopress_social_fb_img":"","_seopress_social_fb_img_attachment_id":0,"_seopress_social_fb_img_width":0,"_seopress_social_fb_img_height":0,"_seopress_social_twitter_title":"","_seopress_social_twitter_desc":"","_seopress_social_twitter_img":"","_seopress_social_twitter_img_attachment_id":0,"_seopress_social_twitter_img_width":0,"_seopress_social_twitter_img_height":0,"_seopress_redirections_value":"","_seopress_redirections_enabled":"","_seopress_redirections_enabled_regex":"","_seopress_redirections_logged_status":"both","_seopress_redirections_param":"","_seopress_redirections_type":301,"_seopress_analysis_target_kw":"text blocks,java text blocks,mehrzeilige strings","_seopress_news_disabled":"","_seopress_video_disabled":"","_seopress_video":[],"_seopress_pro_schemas_manual":[{"_seopress_pro_rich_snippets_type":"none"}],"_seopress_pro_rich_snippets_disable_all":"","_seopress_pro_rich_snippets_disable":[],"_seopress_pro_schemas":[],"_uag_custom_page_level_css":"","_wp_convertkit_post_meta":{"form":"-1","landing_page":"","tag":"0","restrict_content":"0"},"_metis_text_type":"standard","_metis_text_length":7437,"_post_count":0,"footnotes":""},"categories":[64],"tags":[179],"class_list":["post-27054","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-java","tag-java-amber-de"],"uagb_featured_image_src":{"full":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/01\/java-text-blocks.jpg",1770,986,false],"thumbnail":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/01\/java-text-blocks.jpg",150,84,false],"medium":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/01\/java-text-blocks.jpg",300,167,false],"medium_large":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/01\/java-text-blocks.jpg",768,428,false],"large":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/01\/java-text-blocks.jpg",1024,570,false],"feature_thumb_224":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/01\/java-text-blocks-224x125.jpg",224,125,true],"feature_thumb_336":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/01\/java-text-blocks-336x187.jpg",336,187,true],"feature_thumb_504":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/01\/java-text-blocks-504x281.jpg",504,281,true],"feature_thumb_672":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/01\/java-text-blocks-672x374.jpg",672,374,true],"half_400":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/01\/java-text-blocks-400x223.jpg",400,223,true],"half_600":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/01\/java-text-blocks-600x334.jpg",600,334,true],"full_800":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/01\/java-text-blocks-800x446.jpg",800,446,true],"full_944":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/01\/java-text-blocks-944x526.jpg",944,526,true],"full_1200":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/01\/java-text-blocks-1200x668.jpg",1200,668,true],"wide_1180":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/01\/java-text-blocks-1180x490.jpg",1180,490,true],"wide_1770":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/01\/java-text-blocks-1770x735.jpg",1770,735,true],"1536x1536":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/01\/java-text-blocks.jpg",1536,856,false],"2048x2048":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/01\/java-text-blocks.jpg",1770,986,false]},"uagb_author_info":{"display_name":"Sven Woltmann","author_link":"https:\/\/www.happycoders.eu\/de\/author\/sven\/"},"uagb_comment_info":1,"uagb_excerpt":"Text Blocks sind eine Notation f\u00fcr mehrzeilige Strings in Java. Warum brauchen wir sie? Wie schreibt und formatiert man sie? Welche Escape-Sequenzen k\u00f6nnen bzw. m\u00fcssen wir verwenden?","public_identification_id":"2c71fcb288b84eadb9735ba629d275b4","private_identification_id":"c0ca39cb8b1a4386bfe44971d4bfbad9","_links":{"self":[{"href":"https:\/\/www.happycoders.eu\/de\/wp-json\/wp\/v2\/posts\/27054","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.happycoders.eu\/de\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.happycoders.eu\/de\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.happycoders.eu\/de\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.happycoders.eu\/de\/wp-json\/wp\/v2\/comments?post=27054"}],"version-history":[{"count":10,"href":"https:\/\/www.happycoders.eu\/de\/wp-json\/wp\/v2\/posts\/27054\/revisions"}],"predecessor-version":[{"id":52467,"href":"https:\/\/www.happycoders.eu\/de\/wp-json\/wp\/v2\/posts\/27054\/revisions\/52467"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.happycoders.eu\/de\/wp-json\/wp\/v2\/media\/34360"}],"wp:attachment":[{"href":"https:\/\/www.happycoders.eu\/de\/wp-json\/wp\/v2\/media?parent=27054"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.happycoders.eu\/de\/wp-json\/wp\/v2\/categories?post=27054"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.happycoders.eu\/de\/wp-json\/wp\/v2\/tags?post=27054"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}