1. 程式人生 > 程式設計 >JDK 14的新特性:文字塊Text Blocks的使用

JDK 14的新特性:文字塊Text Blocks的使用

說起來,Text Blocks是在JDK13中以第一次預覽版本引入的。現在在JDK14中是第二次預覽版本 JEP 368: Text Blocks。

在我們日常的工作中,有時候需要用到一大段的字串,這些字串需要換行,需要排版,需要轉義。在一個文字編輯器中,這當然是非常容易的事情。但是在java程式碼中,就是一個噩夢了。

雖然IDE可以自動幫我們加上換行甚至可以對字串進行拼接。但在java程式眼中,新增的諸多額外的程式碼破壞了程式碼的美感。是任何一個有潔癖的程式設計師都無法忍受的。

怎麼辦? Text Blocks就是來解救大家的。

舉個例子

我們先來個直觀的例子,然後再分析Text Blocks的特點。

還是舉HTML的例子,如果我們想要打印出帶縮減,有格式的html,傳統方法可以這樣做:

String html = "<html>\n" +
       "  <body>\n" +
       "    <p>Hello,world</p>\n" +
       "  </body>\n" +
       "</html>\n";

上面的程式碼看著特別彆扭,讓我們看看用文字塊方式怎麼做:

String html = """
       <html>
         <body>
           <p>Hello,world</p>
         </body>
       </html>
       """;

是不是清爽很多,想要立即給文字塊點個贊。

別慌點贊,我們還有更多的東西要討論。

Indentation編排

可能有人又有問題了,文字塊好用是好用,你這輸出結果中,欄位前面的空格都去哪了了呀?

這裡就要介紹這個概念了:英文名字叫Indentation,中文我把它翻譯為編排。

再看一下上面的程式碼,這一次我們把程式碼前面的空格以點來表示:

String html = """
..............<html>
..............  <body>
..............    <p>Hello,world</p>
..............  </body>
..............</html>
..............""";

Indentation的規則就是以最下面的“”“為界,對每一行都移除相同數量的空格。

上面的程式碼輸出:

<html>
<body>
<p>Hello,world</p>
</body>
</html>

上面的例子,最下面的”“”剛好在最左邊的位置,如果把“”“向右移動4個空格會發生什麼呢?

String html = """
..............<html>
..............  <body>
..............    <p>Hello,world</p>
..............  </body>
..............</html>
..................""";

輸出結果:

<html>
<body>
<p>Hello,world</p>
</body>
</html>

我們看到輸出結果是不變的,這樣我們又得到一條結論:如果”“”向右移動,則以text block中最左的那一行記錄為準。

如果我們把“”“向左移動四位,就會發現最終的輸出結果每行前面都有四個空格。

這個功能是和String新增的新的String::stripIndent()對於的。

Escaping轉義

還是看一個直觀的例子:

  @Test
  public void useEscape(){
    String code =
        """
        "
        ""
        \s\s\s\s\s保留這行前面的空白
        String text = \"""
          這裡展示的是escape的用法!
        \""";
        跟大家說個密碼,這一行很長,我準備分行\
        來寫,哈哈!
        """;
    log.info("{}",code);
  }

輸出結果:


""
保留這行前面的空白
String text = """
這裡展示的是escape的用法!
""";

跟大家說個密碼,這一行很長,我準備分行來寫,哈哈!

首先可以看到一個雙引號和兩個雙引號都是不用轉義的,直接寫就行了。三個雙引號就需要轉義了。

另外s表示的是一個空格。在需要的時候可以使用。

在一行結尾直接插入,表示這一行太長了,還沒結束。

注意在Text Block中,不管是windows的回車,換行符還是linux的換行符都會轉義成為換行符。
這個轉義功能也對於了String的新方法translateEscapes()。

formatted格式化

最後介紹一下Text block的格式化,和String的格式化是一樣的,舉個SQL的例子:

  @Test
  public void useMethod(){
    String query1 = """
        SELECT `EMP_ID`,`LAST_NAME` FROM `EMPLOYEE_TB`
        WHERE `CITY` = '%s'
        ORDER BY `EMP_ID`,`LAST_NAME`;
        """;

    log.info(query1.formatted("我是一個引數"));
  }

輸出結果:

SELECT `EMP_ID`,`LAST_NAME` FROM `EMPLOYEE_TB`
WHERE `CITY` = '我是一個引數'
ORDER BY `EMP_ID`,`LAST_NAME`;

上面的例子中,我們使用%s來定義佔位符。

總結

雖然Text Block好用,但可惜還是預覽版本,正式版本可能要等JDK15了。

本文的例子https://github.com/ddean2009/learn-java-base-9-to-20

到此這篇關於JDK 14的新特性:文字塊Text Blocks的使用的文章就介紹到這了,更多相關JDK14 文字塊Text Blocks內容請搜尋我們以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援我們!