提及來,Text Blocks是在JDK13中以第一次預覽版本引入的。如今在JDK14中是第二次預覽版本 JEP 368: Text Blocks。html
在咱們平常的工做中,有時候須要用到一大段的字符串,這些字符串須要換行,須要排版,須要轉義。在一個文本編輯器中,這固然是很是容易的事情。可是在java代碼中,就是一個噩夢了。java
雖然IDE能夠自動幫咱們加上換行甚至能夠對字符串進行拼接。但在java程序眼中,添加的諸多額外的代碼破壞了代碼的美感。是任何一個有潔癖的程序員都沒法忍受的。linux
怎麼辦? Text Blocks就是來解救你們的。git
咱們先來個直觀的例子,而後再分析Text Blocks的特色。程序員
仍是舉HTML的例子,若是咱們想要打印出帶縮減,有格式的html,傳統方法能夠這樣作:github
String html = "<html>\n" + " <body>\n" + " <p>Hello, world</p>\n" + " </body>\n" + "</html>\n";
上面的代碼看着特別彆扭,讓咱們看看用文本塊方式怎麼作:windows
String html = """ <html> <body> <p>Hello, world</p> </body> </html> """;
是否是清爽不少,想要當即給文本塊點個贊。api
別慌點贊,咱們還有更多的東西要討論。編輯器
可能有人又有問題了,文本塊好用是好用,你這輸出結果中,字段前面的空格都去哪了了呀?翻譯
這裏就要介紹這個概念了:英文名字叫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()對於的。
仍是看一個直觀的例子:
@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()。
最後介紹一下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
本文做者:flydean程序那些事本文連接:http://www.flydean.com/jdk-14-text-blocks/
本文來源:flydean的博客
歡迎關注個人公衆號:程序那些事,更多精彩等着您!