【プログラミングしてみよう41】JavaのText Blocksで複数行文字列をスッキリ書く

Java

前回はPattern Matchingを使った型チェックと型変換の新しい書き方を学びました。

今回は「Text Blocks(テキストブロック)」について解説します。 Java 15から正式導入されたText Blocksを使うことで、HTMLやJSON・SQLなどの複数行にわたる文字列をとても読みやすく書けるようになります。

Text Blocksとは

これまで複数行の文字列を扱うとき、改行コード \n やStringBuilderを使って組み立てる必要がありました。

// 従来の書き方
String json = "{\n"
            + "  \"name\": \"ぱんまる\",\n"
            + "  \"age\": 25\n"
            + "}";

\n\" だらけで非常に読みにくいですね。Text Blocksを使うと同じ内容をこのように書けます。

// Text Blocksを使った書き方
String json = """
        {
          "name": "ぱんまる",
          "age": 25
        }
        """;

""" で始まり """ で終わる形で、その間の文字列がそのまま複数行の文字列になります。

サンプルコード(Text Blocksの基本)

ファイル作成

「Java29」フォルダに TextBlockTest.java という名前でファイルを作成します

コード入力

以下のコードを入力します。

public class TextBlockTest {
    public static void main(String[] args) {
        // 従来の書き方
        String oldStyle = "1行目\n"
                        + "2行目\n"
                        + "3行目";
        System.out.println("--- 従来の書き方 ---");
        System.out.println(oldStyle);

        // Text Blocksを使った書き方
        String textBlock = """
                1行目
                2行目
                3行目
                """;
        System.out.println("--- Text Blocks ---");
        System.out.println(textBlock);

        // インデントの制御
        String indented = """
                これは
                    インデントされた
                テキストブロックです
                """;
        System.out.println("--- インデント ---");
        System.out.println(indented);

        // 末尾の改行を含まない書き方
        String noTrailingNewline = """
                改行なし""";
        System.out.println("--- 末尾改行なし ---");
        System.out.println(noTrailingNewline);
        System.out.println("(ここが次の行)");
    }
}

コンパイル

javac TextBlockTest.java

実行

java TextBlockTest

実行結果は次のようになります。

--- 従来の書き方 ---
1行目
2行目
3行目
--- Text Blocks ---
1行目
2行目
3行目

--- インデント ---
これは
    インデントされた
テキストブロックです

--- 末尾改行なし ---
改行なし(ここが次の行)

サンプルコード(Text BlocksとJSON・HTML・SQL)

Text Blocksが最も力を発揮するのは、JSONやHTML・SQLなどの複数行テキストを扱う場面です。

ファイル作成

「Java29」フォルダに TextBlockPractice.java という名前でファイルを作成します

コード入力

以下のコードを入力します。

public class TextBlockPractice {
    public static void main(String[] args) {
        // JSONをText Blocksで書く
        String name = "ぱんまる";
        int age = 25;

        String json = """
                {
                  "name": "%s",
                  "age": %d,
                  "languages": ["Java", "Python"]
                }
                """.formatted(name, age);

        System.out.println("--- JSON ---");
        System.out.println(json);

        // HTMLをText Blocksで書く
        String title = "ぱんまるのブログ";
        String content = "Javaを学んでいます";

        String html = """
                <html>
                  <head>
                    <title>%s</title>
                  </head>
                  <body>
                    <h1>%s</h1>
                    <p>%s</p>
                  </body>
                </html>
                """.formatted(title, title, content);

        System.out.println("--- HTML ---");
        System.out.println(html);

        // SQLをText Blocksで書く
        String table = "users";
        int minAge = 20;

        String sql = """
                SELECT id, name, age
                FROM %s
                WHERE age >= %d
                ORDER BY age ASC
                """.formatted(table, minAge);

        System.out.println("--- SQL ---");
        System.out.println(sql);
    }
}

コンパイル

javac TextBlockPractice.java

実行

java TextBlockPractice

実行結果は次のようになります。

--- JSON ---
{
  "name": "ぱんまる",
  "age": 25,
  "languages": ["Java", "Python"]
}

--- HTML ---
<html>
  <head>
    <title>ぱんまるのブログ</title>
  </head>
  <body>
    <h1>ぱんまるのブログ</h1>
    <p>Javaを学んでいます</p>
  </body>
</html>

--- SQL ---
SELECT id, name, age
FROM users
WHERE age >= 20
ORDER BY age ASC

コードの解説

Text Blocksは """ で始まり、開き """ の後ろに文字を書くことはできません。必ず改行してから内容を書き始めます。閉じ """ の位置がインデントの基準になり、それより深いインデントだけが文字列に含まれます。そのため、ソースコード上のインデントがそのまま文字列に混入しないようになっています。

閉じ """ を最後の行の末尾に書くと末尾の改行が含まれず、行末を空けて次の行に """ を書くと末尾に改行が含まれます。

.formatted(name, age) はText BlocksにStringの formatted() メソッドをチェーンして呼び出しています。String.format() と同じように %s%d で値を埋め込めます。JSONの中に " が含まれていてもエスケープ不要で書ける点が、Text Blocksの大きなメリットです。

従来の書き方では \"\n だらけになっていたJSONやHTMLが、Text Blocksを使うことでそのままの形で書けるようになり、読み書きのしやすさが大きく向上します。

まとめ

Text Blocksを使うことで、複数行にわたる文字列を \n\" なしで読みやすく書けます。""" で囲むだけで複数行の文字列になり、.formatted() と組み合わせることで値の埋め込みも簡単です。JSONやHTML・SQLなど、構造を持ったテキストを扱う場面で特に効果を発揮します。Java 15以降の機能なので、バージョンを確認してから使いましょう。これまで学んできたJSON操作・HttpClientと組み合わせると、リクエスト本文の記述もぐっと書きやすくなります。

2026/07/20(月) ぱんまる

コメント

タイトルとURLをコピーしました