Java 15で導入された(非プレビュー) テキスト ブロック機能。行から共通の空白プレフィックスを削除することにより、コードのインデントを壊さずに複数行の文字列リテラルを定義できます。アルゴリズムはJEP 378で説明されています。
しかし、タブとスペースの組み合わせを使用して行がインデントされている場合、「共通の空白プレフィックス」はどのように正確に定義されていますか?
たとえば、次の場合 (·
はスペース、→
タブ文字を意味します)の場合、文字列値はどうなりますか?
→ → ····文字列 text = """ → → ····→ line1 → ········→ line2 → ····→ → """;
OpenJDK を使用した簡単なテストでは、結果の文字列は次のようになります。
ライン1 ・・・→ line2
したがって、Javac はスペースやタブを含む空白記号をカウントし、そのカウントを使用するように見えます — スペース (0x20) とタブ (0x09) を同等に扱います。これは予想される動作ですか?
補足: これは純粋に理論的な問題ではありません。スペース/タブが混在するインデントと大きなコードベースを持つプロジェクトにとって実用的に重要です。