日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢(xún)
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷(xiāo)解決方案
Java中的3個(gè)雙引號(hào)是什么語(yǔ)法?Java15刷新你的認(rèn)知!

一、前言

專(zhuān)注于為中小企業(yè)提供成都網(wǎng)站建設(shè)、做網(wǎng)站服務(wù),電腦端+手機(jī)端+微信端的三站合一,更高效的管理,為中小企業(yè)八宿免費(fèi)做網(wǎng)站提供優(yōu)質(zhì)的服務(wù)。我們立足成都,凝聚了一批互聯(lián)網(wǎng)行業(yè)人才,有力地推動(dòng)了1000多家企業(yè)的穩(wěn)健成長(zhǎng),幫助中小企業(yè)通過(guò)網(wǎng)站建設(shè)實(shí)現(xiàn)規(guī)模擴(kuò)充和轉(zhuǎn)變。

在 Java 15 的推出的時(shí)候,Text Blocks 正式轉(zhuǎn)正,我叫它 “文本塊” 好了,棧長(zhǎng)也做了簡(jiǎn)單介紹,沒(méi)看過(guò)的可以點(diǎn)擊這里看下。

文本塊,是一個(gè)多行字符串,它可以避免使用大多數(shù)轉(zhuǎn)義符號(hào),自動(dòng)以可預(yù)測(cè)的方式格式化字符串,并讓開(kāi)發(fā)人員在需要時(shí)可以控制格式。

文本塊最早準(zhǔn)備在 JDK 12 添加的,但最終撤消了,然后在 JDK 13 中作為預(yù)覽特性進(jìn)行了添加,然后又在 JDK 14 中再次預(yù)覽,在 JDK 15 中,文本塊終于轉(zhuǎn)正,暫不再做進(jìn)一步的更改。

二、示例

來(lái)看下這個(gè) HTML 語(yǔ)言示例你就懂了:

 
 
 
 
  1. String html1 = "\n" + 
  2.               "    \n" + 
  3.               "        

    Hi, Java技術(shù)棧

    \n" + 
  4.               "        

    歡迎關(guān)注,分享更多干貨

    \n" + 
  5.               "    \n" + 
  6.               "\n"; 

使用 Text Blocks:

 
 
 
 
  1. String html2 = """ 
  2.                
  3.                    
  4.                       

    Hi, Java技術(shù)棧

     
  5.                       

    歡迎關(guān)注,分享更多干貨

     
  6.                    
  7.                
  8.               """; 

文本塊需要用三個(gè)雙引號(hào)包起來(lái),熟悉 Python 的都知道,三個(gè)雙引號(hào)表示多行注釋?zhuān)瑳](méi)想到 Java 竟然用作了多行字符串……

再來(lái)看下字節(jié)碼:

看到了吧?文本塊編譯后會(huì)自動(dòng)添加換行符,和原始的拼接寫(xiě)法編譯結(jié)果一致,再也不用再拼接字符串了。

三、詳細(xì)介紹

其實(shí)文本塊的作用遠(yuǎn)不止換行符這么簡(jiǎn)單,下面棧長(zhǎng)詳細(xì)介紹下。

1、Line terminators(換行符)

如上面介紹,編譯期自動(dòng)增加換行符可以用來(lái)增強(qiáng)用非 Java 語(yǔ)言編寫(xiě)的代碼的字符串的可讀性,比如我們經(jīng)常要拼接 HTML、XML、SQL 語(yǔ)言代碼等,代碼非常難看。

 
 
 
 
  1. """ 
  2. Java 
  3. line 2 
  4. line 3 
  5. """ 

就等同于:

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

或者:

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

如果最后一行不需要換行,可以這么寫(xiě):

 
 
 
 
  1. """ 
  2. line 1 
  3. line 2 
  4. line 3""" 

還可以定義一個(gè)空的文本塊:

 
 
 
 
  1. String empty = """ 
  2. """; 

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

2、Incidental white space(空格編排)

繼續(xù)看上面那段代碼:

注意這根線沒(méi)有,線前面有一排空格,意味著是不會(huì)被編譯進(jìn)去的,只是用來(lái)縮進(jìn)格式化方便閱讀,所以我叫它空格編排。

如果 """ 在最后單獨(dú)占一排,則以它左對(duì)齊,否則以最靠左的一列左對(duì)齊。

IDEA 真是強(qiáng)大啊,對(duì) JDK 15 都支持這么好了。如果你說(shuō)沒(méi)激活碼,這都不是事,可以關(guān)注公眾號(hào)Java技術(shù)棧,回復(fù):idea,棧長(zhǎng)教你免費(fèi)獲取正版。

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

3、Escape sequences(轉(zhuǎn)義字符)

如下面代碼所示:

我在代碼中又增加了 \s、\n、\t 之類(lèi)的轉(zhuǎn)義字符,可以直接拿來(lái)用,雙引號(hào)也不需要轉(zhuǎn)義。

結(jié)果輸出:

 
 
 
 
  1.  
  2.      
  3.         

    Hi,  "Java技術(shù)棧"

     
  4.  
  5.  
  6.         

    歡迎關(guān)注,\分享"更多"干貨

     
  7.      
  8.     

實(shí)際工作中可能出現(xiàn)的 SQL 語(yǔ)句的拼寫(xiě)就有救了!

不使用 Text Blocks:

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

使用 Text Blocks:

 
 
 
 
  1. String query = """ 
  2.                SELECT "EMP_ID", "LAST_NAME" FROM "EMPLOYEE_TB" 
  3.                WHERE "CITY" = 'INDIANAPOLIS' 
  4.                ORDER BY "EMP_ID", "LAST_NAME"; 
  5.                """; 

當(dāng)然,拼接 SQL 要注意別造成 SQL 注入漏洞了,這里只是介紹使用。

另外,Java 15 新增了一個(gè) String.translateEscapes 轉(zhuǎn)義方法,可以直接對(duì)字符串內(nèi)容進(jìn)行轉(zhuǎn)義。

4、格式化參數(shù)

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

對(duì)上面的 SQL 語(yǔ)句進(jìn)行擴(kuò)展下,參數(shù)使用占位符進(jìn)行格式化:

 
 
 
 
  1. String query = """ 
  2.                SELECT "EMP_ID", "LAST_NAME" FROM "EMPLOYEE_TB" 
  3.                WHERE "CITY" = '%s' AND author = '%s' 
  4.                ORDER BY "EMP_ID", "LAST_NAME"; 
  5.                """; 
  6.         System.out.println(query.formatted("深圳", "棧長(zhǎng)")); 

結(jié)果輸出:

 
 
 
 
  1. SELECT "EMP_ID", "LAST_NAME" FROM "EMPLOYEE_TB" 
  2. WHERE "CITY" = '深圳' AND author = '棧長(zhǎng)' 
  3. ORDER BY "EMP_ID", "LAST_NAME"; 

直接使用字符串對(duì)象的 formatted 實(shí)例方法感覺(jué)更方便了!

四、結(jié)語(yǔ)

解讀 Text Blocks(文本塊)遠(yuǎn)比想象中要難很多,沒(méi)想到一個(gè)文本塊這么多細(xì)節(jié),文中只是對(duì)文本塊作了一個(gè)部分總結(jié),并不是文本塊的全部?jī)?nèi)容,反正暫時(shí)也用不到,大家簡(jiǎn)單了解即可。

對(duì)文本塊感興趣的、想深入了解更多文本塊細(xì)節(jié)的同學(xué),可以參考官方說(shuō)明:

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

官方介紹文本塊用了 3 萬(wàn)多字……可想而知解讀它的難度。

本文轉(zhuǎn)載自微信公眾號(hào)「Java技術(shù)?!?,可以通過(guò)以下二維碼關(guān)注。轉(zhuǎn)載本文請(qǐng)聯(lián)系Java技術(shù)棧公眾號(hào)。


分享標(biāo)題:Java中的3個(gè)雙引號(hào)是什么語(yǔ)法?Java15刷新你的認(rèn)知!
網(wǎng)頁(yè)URL:http://www.dlmjj.cn/article/coeeooe.html