
🟢 はじめに
Javaで複数行の文章(HTMLやJSONなど)を書こうとして、「+ や \n ばかりでコードが読みにくい…😫」と悩んだことはありませんか?
Java15から正式に導入された「テキストブロック(Text Blocks)」を使えば、そんな悩みは一発で解決します!
今回は、テキストブロックを「改行やスペースをそのまま保存できる段ボール箱📦」に例えて、初心者の方にも分かりやすく解説します。
JavaSilver対策としても重要なポイントだと言われていますので、ぜひ最後まで読んでみてくださいね!
🤔 テキストブロックってなに?
テキストブロックは、"""(3つのダブルクォーテーション)で囲むことで、複数行の文字列をそのままスッキリ書ける機能です。
百聞は一見に如かず。
従来の書き方と見比べてみましょう!
今回は、簡単なHTMLのリストを作るコードで比較します。
❌ 従来の書き方(小さなメモ帳と、のり付け)
public class Main { public static void main(String[] args) { // メモ帳の切れ端を、+(のり)と \n(改行記号)で無理やり繋ぐイメージ… String oldWay = "<ul>\n" + " <li>Java</li>\n" + " <li>JavaScript</li>\n" + "</ul>\n"; System.out.println(oldWay); } }
書くのも大変ですし、後から直す時に記号を消してしまってエラーになりがちですよね。
⭕️ テキストブロック(魔法の段ボール箱📦)
public class Main { public static void main(String[] args) { // """ という大きな箱に、そのままポン!と入れるだけ! String newWay = """ <ul> <li>Java</li> <li>JavaScript</li> </ul> """; System.out.println(newWay); } }
とてもスッキリしましたね✨
+ や \n を使わなくても、箱の中に入れた改行や字下げ(インデント)がそのままの形で出力されます。
✅ テキストブロックの「3つの絶対ルール」
テキストブロックには、知っておくべき大事なルールがあります。
特にJavaSilverでは頻出のポイントだと言われています!
ルール①:フタを開けたら、必ず改行する
""" で箱のフタを開けたら、その行には何も文字を書いてはいけません。
すぐにエンターキー(改行)を押すのがルールです。
// 🚨 コンパイルエラー!フタを開けてすぐ文字を詰め込んではダメ! // String error = """<ul><li>Java</li></ul>"""; // ✅ 正解!フタを開けたら、次の行から書き始める String ok = """ <ul><li>Java</li></ul>""";
ルール②:賢いお掃除機能(自動インデント調整)
テキストブロックは、コードの見た目を綺麗にするための「左側の無駄な余白」を、自動的にハサミで切り取ってくれる賢い機能を持っています。
切り取る基準となるのは、「一番左に出っ張っている文字」か「閉じる """」のどちらかです。
// パターンA:閉じる """ を文字と揃える(余白ゼロ) String patternA = """ <p>Hello</p> """; // -> 出力結果は左にピッタリ寄ります。 // パターンB:閉じる """ を少し左に置く(余白を残す) String patternB = """ <p>Hello</p> """; // -> 閉じる """ の位置が基準になるので、<p>の前に少しスペース(字下げ)が残ります!
見た目は同じように見えても、箱を閉じる位置によって出力される結果が変わります。
ルール③:特殊な記号(エスケープシーケンス)の活用🪄
「どうしても行末のスペースを残したい!」「長すぎるからコード上では改行するけど、出力結果は1行にしたい!」というワガママを叶える便利な道具があります。
\s(スペースの保護): 通常、行の右側にある無駄なスペースは自動で消去されますが、\s を置くと「このスペースは大事だから残して!」とJavaに伝えることができます。
\(接着剤): 行の終わりに \ を置くと、その部分の改行がキャンセルされ、下の行とピタッとくっついて1行として出力されます。
String text = """ 吾輩は猫である。\ 名前はまだ無い。\s """; // 出力結果:「吾輩は猫である。名前はまだ無い。 (ここにスペースが残る)」
✍️ まとめ
テキストブロック(""")のおかげで、HTMLやJSON、SQLなどの長い文字列をJavaの中に書くのが劇的にラクになりました。
""" で囲むと、改行やインデントがそのまま保持される📦
開始の """ の後は、必ず改行する!
閉じる """ の位置で、左側の余白(インデント)が決まる
JavaSilverの試験では、「エラーになる書き方」や「どこまで余白が切り取られるか」が引っかけ問題としてよく出題されると言われています。
同じように「テキストブロック(""")って何?🤯」と悩んでいる方の参考になれば幸いです🙌