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

次のコード(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作成・AIで再検証済

解説

テキストブロックは「付随的空白(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が作成し、別の手順のAIで誤りを点検した解説です(有資格者による監修は経ていません)

有資格者(著者)が監修した問題は、すべて無料サンプルとして公開しています。買う前に、その全部を実際に解いて解説まで読めます。有料で追加される問題はAIが作成したもので、有資格者の監修は入っていません。

この問題集の作り方

  1. 問題と解説はAIが作成しています。有資格者(著者)が監修した問題は、無料サンプルとして公開している分だけです。有料で追加される問題に監修は入っていません。
  2. 各問に、公式ドキュメントの出典リンクを付けています。書いてあることは、出典に当たって確かめられます。
  3. 誤答の選択肢それぞれに、なぜ誤りなのかの理由を書いています。
  4. 解説に載せているコンパイル結果は、実際に javac を走らせた出力です。想定した挙動ではありません。
  5. 誤りを見つけたら報告できます。原則として無償で訂正・削除します。
  6. 各試験の運営団体とは無関係の非公式教材です。合格を保証するものではありません。
この分野をもっと解いて、得点源に
テキストブロック を含む問題を分野別に演習できます。
演習する →