首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Java 字串分割與轉義字元:深入理解 split("\\|\\|")

     編輯:Java 相關知識

現象重現

String t = "a||b||c||d";
String[] parts = t.split("\\|\\|");
System.out.println(parts.length); // 輸出 4
System.out.println(Arrays.toString(parts)); // [a, b, c, d]

層層解析:為什麼是四個反斜線?

  1. Java 字串字面值解析:"\\|\\|" → 編譯器將 \\ 解析為單一反斜線 \,\| 解析為字面值 |。結果字串內容為:\|\|(兩個字元:反斜線、豎線、反斜線、豎線)。
  2. 正則引擎解析:正則看到 \|\|,\| 表示「字面值豎線」(因為 | 是正則特殊字元「或」),所以匹配字面字串 ||。

簡記:**Java 層面雙寫反斜線,正則層面轉義特殊字元。**

等價寫法

// 1. 雙重轉義 (標準)
t.split("\\|\\|")

// 2. Unicode 轉義 (無視 Java 層面)
t.split("\\u007c\\u007c") // \u007c = '|'

// 3. Pattern.quote (最推薦,可讀性最高)
t.split(Pattern.quote("||"))

// 4. Character class (單字元匹配)
t.split("[|]{2}") // 或 t.split("\\|{2}")

Java 常見轉義序列總表

類別序列含義Unicode
八進位\0空字元 (NUL)\u0000
\nn兩位八進位
\nnn三位八進位 (0-377)
Unicode\uxxxx四位十六進位
字面字元\"雙引號\u0022
\'單引號\u0027
\\反斜線\u005C
\r回車 (CR)\u000D
\n換行 (LF)\u000A
\t定位符 (Tab)\u0009
\b退格 (BS)\u0008
\f換頁 (FF)\u000C
正則特殊字元轉義\.句點\u002E
\$美元符號\u0024
\^乘方/行首\u005E
\{左大括號\u007B
\[左中括號\u005B
\(左小括號\u0028
\|豎線 (或)\u007C
\)右小括號\u0029
\*星號\u002A
\+加號\u002B
\?問號\u003F
\\反斜線\u005C

最佳實踐建議

  1. 固定字串分割用 Pattern.quote(str):自動處理所有特殊字元,語意清晰。
  2. 正則模式複用:Pattern p = Pattern.compile(regex); p.split(input) 避免重複編譯。
  3. 簡單單字元分割:String.split("|") 不會按正則處理(JDK 特例優化),但建議統一用 Pattern.quote。

總結

split("\\|\\|") 的四個反斜線源於「Java 字面值轉義」與「正則元字元轉義」雙重作用。理解雙層解析機制,善用 Pattern.quote 與 Unicode 轉義,能寫出更健壯、可維護的字串處理代碼。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved