Java文本块
文本塊是JDK增強(qiáng)建議( JEP 355 ),可以在JDK 13和14中作為預(yù)覽語(yǔ)言功能使用。它計(jì)劃在JDK 15中成為永久性功能。文本塊是跨越多行并不需要的String文字。對(duì)于大多數(shù)轉(zhuǎn)義序列。
動(dòng)機(jī)
在標(biāo)準(zhǔn)Java字符串中嵌入XML,JSON或SQL之類的格式會(huì)變得很煩人。 例如,由于必須進(jìn)行轉(zhuǎn)義,因此只有兩個(gè)鍵的簡(jiǎn)單JSON代碼片段在Java中幾乎無(wú)法讀取:
String json = "{\n" + "\"name\": \"john\",\n" + "\"age\": 42\n" + "}" ;文本塊進(jìn)行救援
使用新的文本塊功能,我們可以將代碼重寫為:
String text = "" " { "name" : "john" , "age" : "42" } "" ";使用三引號(hào)(“””)打開(和關(guān)閉)文本塊。 文本從下一行開始。 打開文本塊后,該行的其余部分需要保持空白。
如果我們將此字符串打印到控制臺(tái),我們將看到:
{ "name" : "john" , "age" : "42" }您可能已經(jīng)注意到,左側(cè)的凹痕已被去除。 這是因?yàn)槲谋緣K的處理分為三個(gè)步驟:
- 行終止符被標(biāo)準(zhǔn)化為L(zhǎng)F字符。 這樣可以避免不同平臺(tái)(例如Windows和Unix)之間的問題。
- 偶然的前導(dǎo)空格和所有尾隨空格均被刪除。 偶然的前導(dǎo)空格是通過(guò)找到所有行的前導(dǎo)空格的公共數(shù)量來(lái)確定的。
- 轉(zhuǎn)義序列被解釋。 文本塊可以包含與標(biāo)準(zhǔn)字符串相同的轉(zhuǎn)義序列(例如\ t或\ n)。 請(qǐng)注意,已經(jīng)添加了兩個(gè)新的轉(zhuǎn)義序列:\ s用于顯式空間,\ <eol>作為連續(xù)指示符(稍后在\ <eol>上有更多介紹)。
如果我們明確需要前導(dǎo)空格,則可以使用indent()方法:
String text = "" " { "name" : "john" , "age" : "42" } "" ".indent( 4 );這會(huì)在我們的JSON代碼段中添加4個(gè)額外的前導(dǎo)空格。 所以看起來(lái)像這樣:
{ "name" : "john" , "age" : "42" }或者,我們可以從結(jié)尾的三引號(hào)中刪除4個(gè)前導(dǎo)空格以產(chǎn)生相同的結(jié)果:
String text = "" " { "name" : "john" , "age" : "42" } "" "; // <-- moving this 4 spaces to the left produces 4 additional leading spaces新的\ <eol>轉(zhuǎn)義序列
使用新的\ <eol>轉(zhuǎn)義序列,我們可以將單行的內(nèi)容拆分為多行,而無(wú)需創(chuàng)建實(shí)際的行終止符。
String text = "" " 1 2 \ 3 \ 4 5 "" ";結(jié)果是:
1 2 3 4 5轉(zhuǎn)義三引號(hào)
如果我們需要在文本塊中寫入三引號(hào),則只需要對(duì)第一引號(hào)進(jìn)行轉(zhuǎn)義:
String text = "" " Java text blocks start with \ "" " Java text blocks start with \ "" ";這將產(chǎn)生:
Java text blocks start with "" " Java text blocks start with摘要
文本塊是Java編程語(yǔ)言的不錯(cuò)的補(bǔ)充。 通過(guò)支持多行,它們消除了對(duì)雙引號(hào)轉(zhuǎn)義的需要,可以大大提高諸如JSON,XML或SQL之類的嵌入式字符串的可讀性。
建議進(jìn)一步閱讀:Brian Goetz的“ 文本塊” 。
與往常一樣,您可以在GitHub上找到所有提供的示例。
翻譯自: https://www.javacodegeeks.com/2020/06/java-text-blocks-2.html
總結(jié)
- 上一篇: 使用SoapUI调用不同的安全WCF S
- 下一篇: java数字格式化_Java数字格式