在 Java 中使用 String.split() 分割字符串時,參數是正則表達式而非普通字符。許多開發者在分割 Windows 路徑(如 C:\\Program\\files\\images\\flower.jpg)時,直接寫 split("\\") 導致 PatternSyntaxException,原因是反斜槓 \ 在正則中是轉義字符,需要雙重轉義。
String path = "C:\\Program\\files\\images\\flower.jpg";
// ❌ 拋出 PatternSyntaxException
String[] tokens = path.split("\\");
// ✅ 寫法 1:四個反斜槓(Java 字符串轉義 + 正則轉義)
String[] tokens = path.split("\\\\");
// ✅ 寫法 2:Pattern.quote 自動轉義(推薦,可讀性強)
String[] tokens = path.split(Pattern.quote("\\"));
// ✅ 寫法 3:使用 File.separator 獲取系統分隔符(跨平台最佳)
String[] tokens = path.split(Pattern.quote(File.separator));
String path = "C:\\Program\\files\\images\\flower.jpg";
String[] tokens = path.split(Pattern.quote(File.separator));
String fileName = tokens[tokens.length - 1]; // 取最後一段
System.out.println(fileName); // 輸出:flower.jpg
Path path = Paths.get("C:\\Program\\files\\images\\flower.jpg");
String fileName = path.getFileName().toString(); // 直接獲取文件名
| 分割目標 | 正則寫法 | 說明 |
|---|---|---|
點號 . | split("\\.") 或 split(Pattern.quote(".")) | 正則中 . 代表任意字符 |
竄線號 | | split("\\|") | 正則或運算符 |
美元符 $ | split("\\$") | 正則行尾錨點 |
反斜槓 \ | split("\\\\") | 雙重轉義 |
記住:split 參數永遠是正則表達式,含特殊字符時請用 Pattern.quote() 包裹,或查閱正則轉義表。