Java15から文字列記述方法としてテキストブロックという機能ができました。
テキストブロックは、複数行にわたる文字列リテラルを簡単に作成できる新機能です。
これは、より大きなコードブロックやフォーマットされたテキストを表現するために非常に役立ち、従来の文字列リテラルの代わりにテキストブロックを使用することで、ソースコードがより読みやすくなり、維持管理も容易になります。
使い方
テキストブロックは3つのダブルクオート(""")で囲むことで定義します。
その中に記述されたテキストはそのままの形で文字列として保持され、改行も含めて保存されます。
String textBlock = """
文字列情報
""";
Before
例えば、Json形式の文字列をJavaで記述する場合、従来は下記のように記述する必要がありました。
public static void main(String[] args) {
var json = "{ \"id\": \"1\", \"name\": \"Mike\", \"gender\": \"male\" }";
System.out.println(json);
}
エスケープがたくさんあるので、可読性が著しく低下していますね。
> Task :Main.main()
{ "id": "1", "name": "Mike", "gender": "male" }
After
テキストブロックにすると、かなり見やすくなりますね!
public static void main(String[] args) {
var id = "1";
var name = "Mike";
var gender = "male";
var json = """
{ "id": "%s", "name": "%s", "gender": "%s" }
""".formatted(id, name, gender);
System.out.println(json);
}
テキストブロック内で動的な変数を使いたい場合ですが、JavaScriptのテンプレートリテラルのような、テキストブロック内に変数を直接埋め込む機能はまだないので、String.format()
やformatted()
機能を使わないといけないですね。
> Task :Main.main()
{ "id": "1", "name": "Mike", "gender": "male" }
実行結果に変わりなしですね。
JSON形式を例にしましたが、そのほかにも、SQLクエリやHTML、XMLをJavaで記述したいときもテキストブロックは有用です。
テキストブロックを使ってHTMLを記述する
public static void main(String[] args) {
String html = """
<html>
<body>
<h1>Welcome to my website</h1>
<p>This is a sample paragraph.</p>
</body>
</html>
""";
System.out.println(html);
}
> Task :Main.main()
<html>
<body>
<h1>Welcome to my website</h1>
<p>This is a sample paragraph.</p>
</body>
</html>
テキストブロックを使ってXMLを記述する
public static void main(String[] args) {
String xml = """
<?xml version="1.0" encoding="utf-8"?>
<note>
<to>大谷</to>
<from>トラウト</from>
<heading>エンゼルスに居ようよ</heading>
<body>Showyどこにも行かないでくれ</body>
</note>
""";
System.out.println(xml);
}
> Task :Main.main()
<?xml version="1.0" encoding="utf-8"?>
<note>
<to>大谷</to>
<from>トラウト</from>
<heading>エンゼルスに居ようよ</heading>
<body>Showyどこにも行かないでくれ</body>
</note>
テキストブロックを使ってSQLを記述する
public static void main(String[] args) {
String sql = """
SELECT *
FROM employees
WHERE id = %s
ORDER BY salary DESC
""".formatted("shotani");
System.out.println(sql);
}
> Task :Main.main()
SELECT *
FROM employees
WHERE id = shotani
ORDER BY salary DESC
テキストブロックを使ってJSONを記述する
例にも挙げた通り、もちろんJSONも記述できます。
public static void main(String[] args) {
var json = """
{ "id": "%s", "name": "%s", "gender": "%s" }
""".formatted("1", "Mike", "male");
System.out.println(json);
}
> Task :Main.main()
{ "id": "1", "name": "Mike", "gender": "male" }
まとめ
テキストブロックは3つのダブルクオート(""")で囲むことで定義できます。
従来の1つのダブルクオートで囲む”文字列”
のなかで、文字列として”
を扱いたいときは、エスケープ(\)を記述しなければいけないなど、非常に面倒で、かつ可読性が低下していましたが、テキストブロックによってそれらは解決します。
テキストブロックの使い所としては、JavaでJSONやXML、SQL、HTMLなどを記述するときのとても有用ですね!
以上ですー