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

Java String.split() 完整用法指南:正則表達式分隔符陷阱與最佳實踐

     編輯:Java 相關知識

核心概念:split 接受正則表達式

public String[] split(String regex) 參數是正則表達式,非純字串。特殊字元需轉義,否則產生非預期結果。

常見特殊字元轉義對照表

分隔符錯誤寫法正確寫法說明
點號 (.)split(".")split("\\.")正則中 . 代表任意字元
管線 (|)split("|")split("\\|")正則中 | 代表或邏輯
星號 (*)split("*")split("\\*")正則中 * 代表零或多次
加號 (+)split("+")split("\\+")正則中 + 代表一次或多次
反斜線 (\)split("\")split("\\\\")需雙重轉義:Java 字串 + 正則
問號 (?)split("?")split("\\?")正則中 ? 代表零或一次
括號 ()[]{} split("(")split("\\(")正則分組/字元類別符號
插入符 (^)split("^")split("\\^")正則開頭錨點
美元符 ($)split("$")split("\\$")正則結尾錨點

多重分隔符處理

使用正則 | 運算子實現多重分隔:

String sql = "acount=? and uu=? or n=?";
// 同時以 and、or 分割
String[] parts = sql.split("and|or");
// 結果:["acount=?", " uu=?", " n=?"]

實戰程式碼範例

public class SplitDemo {
    public static void main(String[] args) {
        // 1. 管線分割
        testSplit("aaa|bbb|ccc", "\\|");
        
        // 2. 星號分割
        testSplit("aaa*bbb*ccc", "\\*");
        
        // 3. 多重分隔符
        String sql = "id=1 and name='test' or status=1";
        String[] tokens = sql.split("and|or");
        System.out.println("多重分割結果:" + Arrays.toString(tokens));
        
        // 4. 反斜線分割
        testSplit("aaa\\bbb\\ccc", "\\\\\\\\"); // Java: \\\\ -> 正則: \\\\ -> 字面: \\
    }
    
    static void testSplit(String input, String regex) {
        String[] result = input.split(regex);
        System.out.printf("輸入:%s | 正則:%s | 結果:%s%n", 
            input, regex, Arrays.toString(result));
    }
}

進階技巧與注意事項

  1. 保留分隔符:使用正則前瞻/後顧斷言 split("(?=\\|)|(?<=\\|)")
  2. 限制分割次數:split(regex, limit),limit > 0 最多分割 limit-1 次
  3. 移除空白元素:搭配 Arrays.stream(arr).filter(s -> !s.isEmpty()).toArray(String[]::new)
  4. 效能考量:頻繁分割相同模式時,預編譯 Pattern.compile(regex) 重複使用

常見錯誤排查

錯誤現象原因解決方案
PatternSyntaxException未轉義特殊字元 (*, +, ? 等)加上雙反斜線轉義
分割結果為空陣列分隔符為開頭/結尾字元檢查字串內容或使用 limit 參數
分割出多餘空字串連續分隔符或首尾分隔符後處理過濾空字串
中文字元分割異常正則預設不支援 Unicode 類別使用 \\p{IsHan} 或指定字元類別
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved