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

您可在下列課程中了解更多技巧喔!

相關學習資源