溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

JDK 14中如何使用文本塊Text Blocks

發(fā)布時(shí)間:2020-07-28 13:40:35 來源:億速云 閱讀:140 作者:小豬 欄目:編程語(yǔ)言

這篇文章主要講解了JDK 14中如何使用文本塊Text Blocks,內(nèi)容清晰明了,對(duì)此有興趣的小伙伴可以學(xué)習(xí)一下,相信大家閱讀完之后會(huì)有幫助。

說起來,Text Blocks是在JDK13中以第一次預(yù)覽版本引入的?,F(xiàn)在在JDK14中是第二次預(yù)覽版本 JEP 368: Text Blocks。

在我們?nèi)粘5墓ぷ髦校袝r(shí)候需要用到一大段的字符串,這些字符串需要換行,需要排版,需要轉(zhuǎn)義。在一個(gè)文本編輯器中,這當(dāng)然是非常容易的事情。但是在java代碼中,就是一個(gè)噩夢(mèng)了。

雖然IDE可以自動(dòng)幫我們加上換行甚至可以對(duì)字符串進(jìn)行拼接。但在java程序眼中,添加的諸多額外的代碼破壞了代碼的美感。是任何一個(gè)有潔癖的程序員都無法忍受的。

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

舉個(gè)例子

我們先來個(gè)直觀的例子,然后再分析Text Blocks的特點(diǎn)。

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

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

是不是清爽很多,想要立即給文本塊點(diǎn)個(gè)贊。

別慌點(diǎn)贊,我們還有更多的東西要討論。

Indentation編排

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

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

再看一下上面的代碼,這一次我們把代碼前面的空格以點(diǎn)來表示:

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

Indentation的規(guī)則就是以最下面的“”“為界,對(duì)每一行都移除相同數(shù)量的空格。

上面的代碼輸出:

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

上面的例子,最下面的”“”剛好在最左邊的位置,如果把“”“向右移動(dòng)4個(gè)空格會(huì)發(fā)生什么呢?

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

輸出結(jié)果:

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

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

如果我們把“”“向左移動(dòng)四位,就會(huì)發(fā)現(xiàn)最終的輸出結(jié)果每行前面都有四個(gè)空格。

這個(gè)功能是和String添加的新的String::stripIndent()對(duì)于的。

Escaping轉(zhuǎn)義

還是看一個(gè)直觀的例子:

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

輸出結(jié)果:


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

跟大家說個(gè)密碼,這一行很長(zhǎng),我準(zhǔn)備分行來寫,哈哈!

首先可以看到一個(gè)雙引號(hào)和兩個(gè)雙引號(hào)都是不用轉(zhuǎn)義的,直接寫就行了。三個(gè)雙引號(hào)就需要轉(zhuǎn)義了。

另外s表示的是一個(gè)空格。在需要的時(shí)候可以使用。

在一行結(jié)尾直接插入,表示這一行太長(zhǎng)了,還沒結(jié)束。

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

formatted格式化

最后介紹一下Text block的格式化,和String的格式化是一樣的,舉個(gè)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("我是一個(gè)參數(shù)"));
  }

輸出結(jié)果:

SELECT `EMP_ID`, `LAST_NAME` FROM `EMPLOYEE_TB`
WHERE `CITY` = '我是一個(gè)參數(shù)'
ORDER BY `EMP_ID`, `LAST_NAME`;

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

看完上述內(nèi)容,是不是對(duì)JDK 14中如何使用文本塊Text Blocks有進(jìn)一步的了解,如果還想學(xué)習(xí)更多內(nèi)容,歡迎關(guān)注億速云行業(yè)資訊頻道。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI