Java文本塊


文本塊是JDK增強建議(JEP 355),可以在JDK13JDK14中作為預覽語言功能使用。它計划在JDK15中成為永久性功能。文本塊是一個字符串文字,它跨越多行,並且不需要大多數轉義字符。

動機

在標准Java字符串中嵌入XMLJSONSQL之類的格式會變得很煩人。例如,由於需要轉義,因此只有兩個鍵的簡單JSON代碼片段在Java中幾乎無法流暢閱讀:

String json =
        "{\n" +
            "\"name\": \"FunTester\",\n" +
            "\"age\": 30\n" +
        "}";

文本塊來拯救

使用新的文本塊功能,我們可以將代碼重寫為:

String text = """
        {
            "name": "FunTester",
            "age": "30"
        }
        """;

使用三引號"""打開和關閉文本塊。文本從下一行開始。打開文本塊后,該行的其余部分需要保持空白。

如果我們將此字符串打印到控制台,我們將看到:

{
    "name": "FunTester",
    "age": "30"
}

可能你已經注意到,左側的縮進已被去除。這是因為文本塊的處理分為三個步驟:

  • 行終止符被標准化為LF字符。這樣可以避免不同平台(例如WindowsUnix)之間的兼容性問題。
  • 附帶的前置空格和所有尾隨空格均被刪除。偶然的前導空格是通過找到所有行的前導空格的公共數量來確定的。
  • 轉義序列被解釋。文本塊可以包含與標准字符串相同的轉義序列(例如\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+原創文章,歡迎關注、交流,禁止第三方擅自轉載。

熱文精選


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM