String line = "good good study, day day up.";
line = line.replaceAll("[^a-zA-Z]+", "");
line 變為 "goodgoodstudydaydayup"(所有非字母字符被移除,包括空格、逗號、句點)。
[^a-zA-Z]+
│ │ │ │
│ │ │ └─ 字符集結束
│ │ └──── 匹配 a-z 或 A-Z(所有英文字母)
│ └──────── 取反:匹配「非」字母的字符
└────────── 字符集開始
+
└────────── 量詞:匹配前面模式 1 次或多次(連續非字母作為一組替換)
原字符串: "good good study, day day up."
│ │ │ │ │ │
匹配組 1: ↓ (空格)
匹配組 2: ↓ (空格)
匹配組 3: ↓ (逗號+空格)
匹配組 4: ↓ (空格)
匹配組 5: ↓ (空格)
匹配組 6: ↓ (句點)
替換為 "" 後: "goodgoodstudydaydayup"
^ 在字符集外表示行首,在字符集 [] 內表示取反。+ 作用於整個 [^a-zA-Z],連續非字母一次性替換,而非逐字符替換(效果相同但效率更高)。line.replaceAll("[^a-zA-Z0-9]+", ""); // 或 [^\\w]+ (\w 包含下劃線)
line.replaceAll("[^\\u4e00-\\u9fa5a-zA-Z0-9]+", "");
line.replaceAll("[^a-zA-Z]+", " "); // "good good study day day up "
Pattern:Pattern p = Pattern.compile("[^a-zA-Z]+"); p.matcher(line).replaceAll("");StringBuilder 手動遍歷,避免正則引擎開銷。replaceAll("[^a-zA-Z]+", "") 的含義是將所有連續的非英文字母字符(含標點、空格、數字等)替換為空字符串,最終只保留純字母序列。理解正則字符集取反 [^...] 與量詞 + 的組合語義,是掌握字符串清洗處理的基礎。