はじめに
Java のテキストブロック(""")は便利ですが、「インデント除去」「内容の開始位置」「末尾の改行」など、個人的に忘れやすい仕様がいくつかあるため、自分用のメモとして整理しておきます。
1. インデント除去の仕様
Java はテキストブロックのインデントを、次の手順で決定します。
- 空行を除くすべての行を対象にする
- 各行の先頭の空白・タブ数を調べる
- その中での最小値を「共通インデント」とする
- 各行からその分だけ削除する
コードで確認してみます。
String s = """
a
b
c
""";
System.out.println(s);
このテキストブロックの各行の先頭インデントは次のようになります(空行は除外):
-
aの行: 8 文字の空白 -
bの行: 10 文字の空白 -
cの行: 8 文字の空白
したがって「共通インデント」は 8 文字になり、各行から 8 文字分だけ削除されます。
結果として、実際の文字列は次のようになります。
a
b
c
「一番左に寄っている行」に合わせて全体が左に詰められる、というイメージです。
2. テキストブロック末尾の改行
Java のテキストブロックは、閉じデリミタ """ の直前の行の末尾に必ず改行が入るという仕様になっています。
つまり、次のコード:
String s = """
Hello
World
""";
実際の文字列はこうなります:
Hello
World
末尾の改行を消したい場合は、閉じデリミタの直前に バックスラッシュ(\) を置きます。
String s = """
Hello
World\
""";
結果:
Hello
World
3. テキストブロックの内容は「開始デリミタの次の行」から始まる
テキストブロックは、開始デリミタ """ の直後の行から内容が始まる、というルールがあります。
そのため、次のコードは コンパイルエラー になります。
String s = """Hello
World
""";
"""Hello と同じ行に文字を書いてしまっているため、これは「テキストブロックの開始」としては不正な構文になります。
動作環境
- Java 25