文本塊是JDK增強建議(JEP 355),可以在JDK13和JDK14中作為預覽語言功能使用。它計划在JDK15中成為永久性功能。文本塊是一個字符串文字,它跨越多行,並且不需要大多數轉義字符。
動機
在標准Java字符串中嵌入XML、JSON或SQL之類的格式會變得很煩人。例如,由於需要轉義,因此只有兩個鍵的簡單JSON代碼片段在Java中幾乎無法流暢閱讀:
String json =
"{\n" +
"\"name\": \"FunTester\",\n" +
"\"age\": 30\n" +
"}";
文本塊來拯救
使用新的文本塊功能,我們可以將代碼重寫為:
String text = """
{
"name": "FunTester",
"age": "30"
}
""";
使用三引號"""打開和關閉文本塊。文本從下一行開始。打開文本塊后,該行的其余部分需要保持空白。
如果我們將此字符串打印到控制台,我們將看到:
{
"name": "FunTester",
"age": "30"
}
可能你已經注意到,左側的縮進已被去除。這是因為文本塊的處理分為三個步驟:
- 行終止符被標准化為
LF字符。這樣可以避免不同平台(例如Windows和Unix)之間的兼容性問題。 - 附帶的前置空格和所有尾隨空格均被刪除。偶然的前導空格是通過找到所有行的前導空格的公共數量來確定的。
- 轉義序列被解釋。文本塊可以包含與標准字符串相同的轉義序列(例如
\t或\n)。請注意,已經添加了兩個新的轉義序列:\s用於顯式空間,\<eol>作為連續指示符(稍后在\<eol>上有更多介紹)。
前置空格
如果我們明確需要前置空格,則可以使用indent()方法:
String text = """
{
"name": "FunTester",
"age": "30"
}
""".indent(4);
這會將4個額外的前導空格添加到我們的JSON代碼段中。控制台輸出看起來像這樣:
{
"name": "FunTester",
"age": "30"
}
或者,我們可以從封閉的三引號中刪除4個前導空格以產生相同的結果:
String text = """
{
"name": "FunTester",
"age": "30"
}
"""; // 將這4個空格向左移動會產生4個額外的前導空格
新的轉義序列
使用新的轉義序列,我們可以將單行的內容拆分為多行,而無需創建實際的行終止符。
String text = """
1
2 \
3 \
4
5
""";
控制台輸出:
1
2 3 4
5
轉義三引號
如果我們需要在文本塊中寫入三引號,則只需要轉義第一引號即可:
String text = """
測試文本 \"""
""";
控制台輸出:
測試文本 """
- 公眾號FunTester首發,更多原創文章:FunTester410+原創文章,歡迎關注、交流,禁止第三方擅自轉載。
