Java中的3個雙引號是什麼語法?Java15刷新你的認知

Java中的3個雙引號是什麼語法?Java15刷新你的認知

Java 中的 3 個雙引號 """ 是什麼語法?

這是 Java 15 新出的,刷新你的認知!

一、前言

在 Java 15 的推出的時候,Text Blocks 正式轉正,我叫它 「文本塊」 好了,站長也做了簡單介紹,沒看過的可以點擊這裡看下。

文本塊,是一個多行字符串,它可以避免使用大多數轉義符號,自動以可預測的方式格式化字符串,並讓開發人員在需要時可以控制格式。

文本塊最早準備在 JDK 12 添加的,但最終撤消了,然後在 JDK 13 中作為預覽特性進行了添加,然後又在 JDK 14 中再次預覽,在 JDK 15 中,文本塊終於轉正,暫不再做進一步的更改。

二、示例

來看下這個 HTML 語言示例你就懂了:

不使用 Text Blocks::

15中,文本塊終於轉正,暫不再做進一步的更改。二、示例

使用 Text Blocks:

作為預覽特性進行了添加,然後又在JDK14中再次預覽,在JDK

文本塊需要用三個雙引號包起來,熟悉 Python 的都知道,三個雙引號表示多行注釋,沒想到 Java 竟然用作了多行字符串……

再來看下字節碼:

最早準備在JDK12添加的,但最終撤消了,然後在JDK13中

看到了吧?文本塊編譯後會自動添加換行符,和原始的拼接寫法編譯結果一致,再也不用再拼接字符串了。

三、詳細介紹

其實文本塊的作用遠不止換行符這麼簡單,下面棧長詳細介紹下。

1、Line terminators(換行符)

如上面介紹,編譯器自動增加換行符可以用來增強用非 Java 語言編寫的代碼的字符串的可讀性,比如我們經常要拼接 HTML、XML、SQL 語言代碼等,代碼非常難看。

測的方式格式化字符串,並讓開發人員在需要時可以控制格式。文本塊

就等同於:

"line 1\nline 2\nline 3\n"

或者:

"line 1\n" +"line 2\n" +"line 3\n"

如果最後一行不需要換行,可以這麼寫:

"""line 1line 2line 3"""

還可以定義一個空的文本塊:

String empty = """""";

一個空字符串也需要兩行代碼,所以這個方式是不推薦使用的。

2、Incidental white space(空格編排)

繼續看上面那段代碼:

文本塊,是一個多行字符串,它可以避免使用大多數轉義符號,自動以可預

注意這根線沒有,線前面有一排空格,代表著是不會被編譯進去的,只是用來縮進格式化方便閱讀,所以我叫它空格編排。

如果 """ 在最後單獨占一排,則以它左對齊,否則以最靠左的一列左對齊。

「文本塊」好了,站長也做了簡單介紹,沒看過的可以點擊這裡看下。
Java15的推出的時候,TextBlocks正式轉正,我叫它

IDEA 真是強大啊,對 JDK 15 都支持這麼好了。如果你說沒激活碼,這都不是事,可以關注公眾號Java技術棧,回覆:idea,棧長教你免費獲取正版。

另外,Java 15 中新增了 String.stripIndent 實例方法,可以直接刪除每一行的開頭和結尾空白字符。

3、Escape sequences(轉義字符)

如下面代碼所示:

是Java15新出的,刷新你的認知!一、前言在

我在代碼中又增加了 \s\n\t 之類的轉義字符,可以直接拿來用,雙引號也不需要轉義。

結果輸出:

<html> <body> <p>Hi, "Java技術棧"</p> <p>歡迎關注,\分享"更多"乾貨</p> </body> </html>

實際工作中可能出現的 SQL 語句的拼寫就有救了!

不使用 Text Blocks:

String query = "SELECT \"EMP_ID\", \"LAST_NAME\" FROM \"EMPLOYEE_TB\"\n" + "WHERE \"CITY\" = 'INDIANAPOLIS'\n" + "ORDER BY \"EMP_ID\", \"LAST_NAME\";\n";

使用 Text Blocks:

String query = """ SELECT "EMP_ID", "LAST_NAME" FROM "EMPLOYEE_TB" WHERE "CITY" = 'INDIANAPOLIS' ORDER BY "EMP_ID", "LAST_NAME"; """;

當然,拼接 SQL 要注意別造成 SQL 注入漏洞了,這裡只是介紹使用。

另外,Java 15 新增了一個 String.translateEscapes 轉義方法,可以直接對字符串內容進行轉義。

4、格式化參數

Java 15 之前格式化字符串中的參數需要使用 String.format 靜態方法,感覺不是很方便,而在 Java 15 中新增了直接格式化字符串的方法:

Java中的3個雙引號"""是什麼語法?這

對上面的 SQL 語句進行擴展下,參數使用占位符進行格式化:

String query = """ SELECT "EMP_ID", "LAST_NAME" FROM "EMPLOYEE_TB" WHERE "CITY" = '%s' AND author = '%s' ORDER BY "EMP_ID", "LAST_NAME"; """; System.out.println(query.formatted("深圳", "棧長"));

結果輸出:

SELECT "EMP_ID", "LAST_NAME" FROM "EMPLOYEE_TB"WHERE "CITY" = '深圳' AND author = '棧長'ORDER BY "EMP_ID", "LAST_NAME";

直接使用字符串對象的 formatted 實例方法感覺更方便了!

四、結語

解讀 Text Blocks(文本塊)遠比想像中要難很多,沒想到一個文本塊這麼多細節,文中只是對文本塊作了一個部分總結,並不是文本塊的全部內容,反正暫時也用不到,大家簡單了解即可。

對文本塊感興趣的、想深入了解更多文本塊細節的同學,可以參考官方說明:

https://openjdk.java.net/jeps/378

作者:Java技術棧

來源:https://mp.weixin.qq.com/s/Ge-Y7yXSu3MtkG4IGWoZpg

聲明:文章觀點僅代表作者本人,PTTZH僅提供信息發布平台存儲空間服務。
喔!快樂的時光竟然這麼快就過⋯
繼續其他精彩內容吧!
more