
本文介绍使用正则表达式配合String.replaceAll()高效移除字符串中所有形如“§X”(§加任意单个字符)的子串,核心是用§.匹配目标模式并替换为空字符串。
本文介绍使用正则表达式配合`string.replaceall()`高效移除字符串中所有形如“§x”(§加任意单个字符)的子串,核心是用`§.`匹配目标模式并替换为空字符串。
在Java字符串处理中,若需批量删除某个特定字符(如§)及其紧随其后的任意一个字符(无论字母、数字或符号),最简洁高效的方式是借助正则表达式的通配符能力。正则表达式中的英文句点 . 表示“匹配除换行符外的任意单个字符”,因此 §. 恰好可精准匹配所有以 § 开头、后跟一个任意字符的二元组合。
例如,对字符串 "§a§b Text" 执行如下操作:
String str = "§a§b Text";
str = str.replaceAll("§.", "");
System.out.println(str); // 输出: " Text"执行后,§a 和 §b 均被完整移除,仅保留末尾的 " Text"(注意开头空格未被影响)。
✅ 关键要点说明:
立即学习“Java免费学习笔记(深入)”;
- replaceAll() 的第一个参数是正则表达式,不是普通字符串,因此无需转义 §(它不是正则元字符);
- 若需匹配的“指定字符”本身是正则特殊字符(如 .、*、+、?、[、( 等),则必须使用反斜杠转义,例如匹配 *x 应写为 "\*.";
- 该方法默认全局匹配(即替换所有符合模式的子串),无需额外标志;
- § 是Unicode字符(U+00A7),Java String原生支持,无需额外编码处理。
⚠️ 注意事项:
- . 默认不匹配换行符( 、 )。若源字符串含多行且需跨行匹配,应启用 DOTALL 模式:str.replaceAll("(?s)§.", "");
- 若“其后字符”可能不存在(如字符串以 § 结尾),§. 将不会匹配该孤立 §,这是安全行为;如需同时清理末尾孤立 §,可改用 §.?$(? 表示前一字符可选,$ 表示行尾);
- 性能敏感场景中,若字符串极大且模式简单,也可考虑使用 StringBuilder 遍历手动跳过,但绝大多数应用推荐正则方案——代码简洁、可读性强、JVM优化充分。
综上,str.replaceAll("§.", "") 是解决此类“删除某字符及其后一位”需求的标准、可靠且专业的Java实践方案。










