JDK 14的新特性:文本塊Text Blocks的使用
說起來,Text Blocks是在JDK13中以第一次預(yù)覽版本引入的。現(xiàn)在在JDK14中是第二次預(yù)覽版本 JEP 368: Text Blocks。
在我們?nèi)粘5墓ぷ髦?,有時候需要用到一大段的字符串,這些字符串需要換行,需要排版,需要轉(zhuǎn)義。在一個文本編輯器中,這當(dāng)然是非常容易的事情。但是在java代碼中,就是一個噩夢了。
雖然IDE可以自動幫我們加上換行甚至可以對字符串進(jìn)行拼接。但在java程序眼中,添加的諸多額外的代碼破壞了代碼的美感。是任何一個有潔癖的程序員都無法忍受的。
怎么辦? Text Blocks就是來解救大家的。
舉個例子
我們先來個直觀的例子,然后再分析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)個贊。
別慌點(diǎn)贊,我們還有更多的東西要討論。
Indentation編排
可能有人又有問題了,文本塊好用是好用,你這輸出結(jié)果中,字段前面的空格都去哪了了呀?
這里就要介紹這個概念了:英文名字叫Indentation,中文我把它翻譯為編排。
再看一下上面的代碼,這一次我們把代碼前面的空格以點(diǎn)來表示:
String html = """ ..............<html> .............. <body> .............. <p>Hello, world</p> .............. </body> ..............</html> ..............""";
Indentation的規(guī)則就是以最下面的“”“為界,對每一行都移除相同數(shù)量的空格。
上面的代碼輸出:
<html>
<body>
<p>Hello, world</p>
</body>
</html>
上面的例子,最下面的”“”剛好在最左邊的位置,如果把“”“向右移動4個空格會發(fā)生什么呢?
String html = """ ..............<html> .............. <body> .............. <p>Hello, world</p> .............. </body> ..............</html> ..................""";
輸出結(jié)果:
<html>
<body>
<p>Hello, world</p>
</body>
</html>
我們看到輸出結(jié)果是不變的,這樣我們又得到一條結(jié)論:如果”“”向右移動,則以text block中最左的那一行記錄為準(zhǔn)。
如果我們把“”“向左移動四位,就會發(fā)現(xiàn)最終的輸出結(jié)果每行前面都有四個空格。
這個功能是和String添加的新的String::stripIndent()對于的。
Escaping轉(zhuǎn)義
還是看一個直觀的例子:
@Test public void useEscape(){ String code = """ " "" \s\s\s\s\s保留這行前面的空白 String text = \""" 這里展示的是escape的用法! \"""; 跟大家說個密碼,這一行很長,我準(zhǔn)備分行\(zhòng) 來寫,哈哈! """; log.info("{}",code); }
輸出結(jié)果:
”
""
保留這行前面的空白
String text = """
這里展示的是escape的用法!
""";
跟大家說個密碼,這一行很長,我準(zhǔn)備分行來寫,哈哈!
首先可以看到一個雙引號和兩個雙引號都是不用轉(zhuǎn)義的,直接寫就行了。三個雙引號就需要轉(zhuǎn)義了。
另外s表示的是一個空格。在需要的時候可以使用。
在一行結(jié)尾直接插入,表示這一行太長了,還沒結(jié)束。
注意在Text Block中,不管是windows的回車,換行符還是linux的換行符都會轉(zhuǎn)義成為換行符。
這個轉(zhuǎn)義功能也對于了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("我是一個參數(shù)")); }
輸出結(jié)果:
SELECT `EMP_ID`, `LAST_NAME` FROM `EMPLOYEE_TB`
WHERE `CITY` = '我是一個參數(shù)'
ORDER BY `EMP_ID`, `LAST_NAME`;
上面的例子中,我們使用%s來定義占位符。
總結(jié)
雖然Text Block好用,但可惜還是預(yù)覽版本,正式版本可能要等JDK15了。
本文的例子https://github.com/ddean2009/learn-java-base-9-to-20
到此這篇關(guān)于JDK 14的新特性:文本塊Text Blocks的使用的文章就介紹到這了,更多相關(guān)JDK14 文本塊Text Blocks內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- JDK13.0.1安裝與環(huán)境變量的配置教程圖文詳解(Win10平臺為例)
- windows10 JDK安裝及配置環(huán)境變量與Eclipse安裝教程
- win10 java(jdk安裝)環(huán)境變量配置和相關(guān)問題
- Windows10系統(tǒng)下JDK1.8的下載安裝及環(huán)境變量配置的教程
- JDK8新特性之判空遍歷寫法
- 深入淺析JDK8新特性之Lambda表達(dá)式
- Java JDK1.5、1.6、1.7新特性整理
- JDK 7 新特性小結(jié)實(shí)例代碼解析
- JDK14的新特性NullPointerExceptions的使用
- JDK10新特性之本地變量類型var的深入理解
相關(guān)文章
SpringSecurity?Web權(quán)限方案實(shí)現(xiàn)全過程
Spring Security是一個功能強(qiáng)大且高度可定制的身份驗(yàn)證和授權(quán)框架,專門用于保護(hù)Java應(yīng)用程序的Web集成,下面這篇文章主要給大家介紹了關(guān)于SpringSecurity?Web權(quán)限方案實(shí)現(xiàn)的相關(guān)資料,需要的朋友可以參考下2024-01-01Spring AOP實(shí)現(xiàn)復(fù)雜的日志記錄操作(自定義注解)
Spring AOP實(shí)現(xiàn)復(fù)雜的日志記錄操作(自定義注解),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-09-09解決idea中maven項目打包成jar報錯:沒有主清單屬性的問題
這篇文章主要給大家分享了idea中maven項目打包成jar,報錯沒有主清單屬性解決方法,文中有詳細(xì)的解決方法,如果又遇到同樣問題的朋友可以參考一下本文2023-09-09springboot基于keytool實(shí)現(xiàn)https的雙向認(rèn)證示例教程
這篇文章主要介紹了springboot基于keytool實(shí)現(xiàn)https的雙向認(rèn)證,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2023-06-06Java向Runnable線程傳遞參數(shù)方法實(shí)例解析
這篇文章主要介紹了Java向Runnable線程傳遞參數(shù)方法實(shí)例解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-06-06解決maven?maven.compiler.source和maven.compiler.target的坑
這篇文章主要介紹了解決maven?maven.compiler.source和maven.compiler.target的坑,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-12-12