バナー画像

テキスト・ブロックは複数行にまたがる文字列を簡単に宣言するための Java の新しい機能です。この記事では、Java 15で新たに追加されたテキスト・ブロックの使用方法について解説していきます。

テキスト・ブロックとは

冒頭で述べたとおり、テキスト・ブロックは Java 15で追加された、改行を含む文字列を簡単に宣言するための新しい文法です。Java 13でプレビュー機能として追加され、いくつかの仕様変更が行れたのち、Java 15で正式な機能となりました。

テキスト・ブロックが登場する以前までは、改行を含む複数行の文字列を宣言する場合は、次のように、改行コードと +で文字列を連携させる煩雑なコードを記述する必要がありました。

String message = "Welcam Potepan\n" +
                 "Unlock\n" +
                 "Your Potential\n";

テキスト・ブロックを使用することで、上のコードは、次のような洗練されたコードに書き換えることが可能になりました。

String message = """
                 Welcam Potepan
                 Unlock
                 Your Potential
                 """;
ポテパンダの一言メモ

文字列を扱う Java 開発者なら、誰しも経験した改行コードと +で文字列連結するコードは、多くの開発者にとって苦痛な作業でした。テキスト・ブロックの登場によって、このような作業から解放され、より直感的で見やすい宣言ができるようになりました。

テキスト・ブロックの使用方法

上で紹介したように、テキスト・ブロックは、 3つのダブルクォーテーションで文字列の開始と終了を宣言します。

"""
文字列
"""

また、開始の “”” の後は必ず改行しなければならず、“”” の後ろに文字列を付けることはできません。(以下のコードはコンパイルエラーとなる)

String message = """文字列
                    文字列
                 """;

//Error:String literal is not properly closed by a double-quote

テキスト・ブロックは、普通の String 型の文字列と同じであるため、メソッドの引数に直接指定することもできます。

public static void main(String[] args) {
  System.out.println("""
      <person>
          <firstName>Bob</firstName>
          <lastName>Jones</lastName>
      </person>
      """);
}

改行コードはLF(\u000A)に置き換えられる

ソースコードの改行コード(ラインターミネータ)は、OS や開発ツールに依存し、Windows であれば CR + LFとなり、UNIX 系の OS であれば LF で保存されるのが一般的です。

テキスト・ブロックでは、このような環境依存をなくすため、コンパイル時に「LF(\u000A)」に正規化されます。

余分な空白は除去され、必要なインデントは残る

テキスト・ブロックでは、各行に設定された付随的なインデントは除去され、開発者が明示的に付けたインデントは残るように設計されています。

次のような JSON 形式の文字列を、テキスト・ブロックで書く場合の例で見てみましょう。

下記イメージの青枠で囲った部分のインデントは、コードの可読性などのために付けられた付随的なインデントで、実行時には不要な空白であると考えられます。

一方で、赤枠で囲った部分は、ユーザーが明示的に付けたインデントであり、実行時にも必要な空白です。

実際に上のコードを実行して、結果を確認してみましょう。付随的なインデントが削除され、必要なインデントだけが残っているのが分かるでしょう。

実行結果

{
  "firstName": "Bob",
  "lastName": "Jones"
}

テキスト・ブロックは、各行のインデントが最も浅いところ(空白以外の文字が最も早く出現する位置)を行の先頭して見なしており、行の先頭以前にある付随的なインデントは、コンパイル時に除去されるようになっています。

各行の末尾の空白は除去される

テキスト・ブロックでは、各行の末尾の空白は無視されます。(コンパイル時に除去される)

//以下のコードでは、各行の末尾に空白を5つ設定しています。
System.out.println("""
    Welcam Potepan     
    Unlock     
    Your Potential     
    """.replaceAll(" ", "△"));

実行結果

Welcam△Potepan
Unlock
Your△Potential

replaceAll で空白を に変換して表示していますが、末尾の空白はコンパイル時に除去されているため、 各行の末尾に が表示されていなことが分かります。

もし、末尾に空白を挿入したい場合は、\s で明示的に空白を指定できます。

//2行目に「\s」で空白を2文字設定
System.out.println("""
    Welcam Potepan
    Unlock\s\s
    Your Potential
    """.replaceAll(" ", "△"));

実行結果

Welcam△Potepan
Unlock△△
Your△Potential

改行をエスケープする時は「\」を使用

テキスト・ブロック内の改行は、そのまま実行時にも改行コードが挿入されるが、行末に \ を設定すると、改行をエスケープ できます。

System.out.println("""
    Welcam Potepan, \
    Unlock, \
    Your Potential
    """);

実行結果

Welcam Potepan, Unlock, Your Potential

テキスト・ブロックの活用

テキスト・ブロックの実践的な活用例を見ていきましょう。

XML・JSONの作成

テキスト・ブロックと formatted メソッドを組み合わせて使用することで、これまで文字列連携などで複雑なコードになりがちだった XML や、JSON 形式のテキストが、格段に見やすく書くことができます。

String json = """
    {
      "firstName": "%s",
      "lastName": "%s"
    }
    """.formatted(first, last);

最終行の改行を除く

テキスト・ブロックでは、終端記号の “”” を改行して書くと、を最終行に改行コードが挿入されます。この改行コードが不要な場合は、“”” を最終行に続けて書くか、\ で改行をエスケープ することで、最終行に改行コードが挿入されるのを防ぐことができます。

System.out.println("""
    Welcam Potepan 
    Unlock     
    Your Potential""");

//もしくは

System.out.println("""
    Welcam Potepan 
    Unlock     
    Your Potential\
    """);

まとめ

Java 15で正式に追加されたテキスト・ブロックの使用方法を解説してきました。

テキスト・ブロックは、複雑になりがちな複数行文字列の処理をシンプルに記述できる構文であるため、是非活用していってください。

【関連記事】
Javaの文字列操作を理解しよう!Stringクラスの基本的な使い方を解説!

エンジニアになりたい人に選ばれるプログラミングスクール「ポテパンキャンプ 」

ポテパンキャンプは卒業生の多くがWebエンジニアとして活躍している実践型プログラミングスクールです。 1000名以上が受講しており、その多くが上場企業、ベンチャー企業のWebエンジニアとして活躍しています。

基礎的な学習だけで満足せず、実際にプログラミングを覚えて実践で使えるレベルまで学習したいという方に人気です。 プログラミングを学習し実践で使うには様々な要素が必要です。

それがマルっと詰まっているポテパンキャンプでプログラミングを学習してみませんか?

卒業生の多くがWebエンジニアとして活躍

卒業生の多くがWeb企業で活躍しております。
実践的なカリキュラムをこなしているからこそ現場でも戦力となっております。
活躍する卒業生のインタビューもございますので是非御覧ください。

経験豊富なエンジニア陣が直接指導

実践的なカリキュラムと経験豊富なエンジニアが直接指導にあたります。
有名企業のエンジニアも多数在籍し品質高いWebアプリケーションを作れるようサポートします。

満足度高くコスパの高いプログラミングスクール「ポテパンキャンプ」

運営する株式会社ポテパンは10,000人以上のエンジニアのキャリアサポートを行ってきております。
そのノウハウを活かして実践的なカリキュラムを随時アップデートしております。

代表の宮崎もプログラミングを覚えサイトを作りポテパンを創業しました。
本気でプログラミングを身につけたいという方にコスパ良く受講していただきたいと思っておりますので、気になる方はぜひスクール詳細をのぞいてくださいませ。