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"; """;