AI作成・独立検証済(有資格者監修なし)1Z0-829 対応
テキストブロック(付随的空白の除去 / 末尾改行)難易度 高無料

次のコード(Java 17・テキストブロック)の出力として正しいものを選べ(行頭のドットは説明用でソースには含まれない。実際のインデントは半角スペース)。

1  String s = """
2  ....    Hello
3  ....      World
4  ....    """;
5  System.out.print("[" + s + "]");

(2行目は先頭スペース4個 + Hello、3行目は先頭スペース6個 + World、4行目の閉じ """ は先頭スペース4個の位置にある)

  1. A[Hello 改行   World 改行 ]World の前にスペース2個・末尾に改行あり)
  2. B[ Hello 改行 World](先頭空白は保持されず末尾改行も無い)
  3. C[Hello 改行   World](末尾改行なし・]World と同じ行)
  4. D[Hello 改行 World 改行 ]World の前の空白まで全て除去)
正解・解説・誤答理由・ひっかけを見る▼ open
✓ 正解:AAI作成・独立検証済

解説

テキストブロックは「付随的空白(incidental white space)」を自動で取り除く。除去量は 全ての非空行 および 閉じデリミタ行の、共通する最小の先頭インデントで決まる(JEP 378)。

  • Hello 行=先頭4、World 行=先頭6、閉じ """ 行=先頭4。最小は 4
  • 各行から先頭4スペースを剥がす → Hello World(2スペース残る)。
  • 閉じデリミタが独立した行にあるため、最後の内容行(World)の後に改行が1つ残る

よって s は文字列 "Hello\n World\n""[" + s + "]"[Hello World] の3行になる(] が単独行なのは末尾改行の証拠)。

各誤答が違う理由
  • B付随的空白の除去が働かない前提の誤り。共通最小インデント4が剥がされ、かつ閉じデリミタ独立行ゆえ末尾改行が残る。
  • C閉じ """ が独立した行にあるため、最後の内容行のあとに改行が1つ残る。] は次の行に来る。
  • D剥がすのは共通最小インデント(4)だけ。World 行は6インデントなので4を引いた残り2スペースが保持される。
ひっかけ: 2つの罠。① 付随的空白の基準に閉じ """ の位置も含まれる(閉じデリミタを深くインデントすると剥がす量が変わる)。② 閉じデリミタが独立行だと末尾に改行が残る""" を内容の直後に置けば末尾改行は消える)。
実機確認の答え合わせ
出力(角括弧は可視化用に付与):
[Hello
  World
]
公式ドキュメント・関連JLS SE17 §3.10.6 Text Blocks
AIが作成し、独立した検証を経た解説です(有資格者による監修は経ていません)
この分野をもっと解いて、得点源に
テキストブロック を含む問題を分野別に演習できます。
演習する →