Java語言新功能Text Blocks簡介
吳修福 Hugh Wu
- 精誠資訊/恆逸教育訓練中心-資深講師
- 技術分類:程式設計
Java程式語言發展至今已經是非常普遍被使用的一種程式語言,也為了因應功能越來越複雜的應用程式開發,語言的結構也勢必進行一些調整與改良。
Text Blocks(以下中文稱為文字區塊)首見於JEP326(JDK12),歷經JEP355(JDK13)、JEP368(JDK14),最終JEP378於JDK15定案。
文字區塊對於開發者來說想要達成幾個目標:
- 簡化大型字串物件的建立
- 增加Java程式中非Java程式語言部份的可讀性
- 支援原先的escape sequences
- 增加單一空白與換行的escape sequences
接下來我們用幾個簡單的例子來說明這些目標。
以往我們需要建立一個比較長的字串時,可能會將內容拆成多行,並以字串串接運算子來進行字串串接:
String poem = "朝辭白帝彩雲間\n" +
"千里江陵一日還\n" +
"兩岸猿聲啼不住\n" +
"輕舟已過萬重山\n";
現在只需要用成對的「"""」三引號來處理即可:
String poem = """
朝辭白帝彩雲間
千里江陵一日還
兩岸猿聲啼不住
輕舟已過萬重山""";
以上的例子輸出會有四行。
如果這四行輸出要在同一行呢?以字串串接的做法就是不要在每一行後面加上換行字元:
String poem = "朝辭白帝彩雲間" +
"千里江陵一日還" +
"兩岸猿聲啼不住" +
"輕舟已過萬重山";
新的文字區塊做法就在每一行後面加上一個倒斜線就好:
String poem = """
朝辭白帝彩雲間\
千里江陵一日還\
兩岸猿聲啼不住\
輕舟已過萬重山""";
不過使用文字區塊要注意結尾的三引號位置,這會影響輸出時最後一行是否換行及每一行前置的空白:
String poem = """
朝辭白帝彩雲間
千里江陵一日還
兩岸猿聲啼不住
輕舟已過萬重山""";
Output:
>java Demo
朝辭白帝彩雲間
千里江陵一日還
兩岸猿聲啼不住
輕舟已過萬重山
>
String poem = """
朝辭白帝彩雲間
千里江陵一日還
兩岸猿聲啼不住
輕舟已過萬重山
""";
Output:
>java Demo
朝辭白帝彩雲間
千里江陵一日還
兩岸猿聲啼不住
輕舟已過萬重山
>
String poem = """
朝辭白帝彩雲間
千里江陵一日還
兩岸猿聲啼不住
輕舟已過萬重山
""";
Output:
>java Demo
朝辭白帝彩雲間
千里江陵一日還
兩岸猿聲啼不住
輕舟已過萬重山
>
另外,每一行後面不管有多少的空白字元都會被編譯器移除,如果需要保留這些空白可以利用新的「\s」來達成:
String poem = """
朝辭白帝彩雲間 \s\
千里江陵一日還 \s\
兩岸猿聲啼不住 \s\
輕舟已過萬重山 \s\
""";
善用這種特性,如果需要在Java程式中嵌入非Java語言的部份就會變得非常便利且可讀性也變得很好了:
HTML:
String html = """
<html>
<body>
<p>Hello, World</p>
</body>
</html>
""";
SQL:
String sql = """
SELECT "employee_id", "last_name"
FROM "employees"
WHERE "city" = 'Taipei'
ORDER BY "employee_id", "last_name";
""";