
本文介绍使用正则表达式配合String.replaceAll()高效移除字符串中所有形如“§X”(§后紧接任意单个字符)的子串,核心是用§.匹配目标模式并替换为空字符串。
本文介绍使用正则表达式配合`string.replaceall()`高效移除字符串中所有形如“§x”(§后紧接任意单个字符)的子串,核心是用`§.`匹配目标模式并替换为空字符串。
在Java字符串处理中,若需批量删除某个特定字符及其后紧邻的一个任意字符(例如将 "§a§b Text" 转换为 " Text"),关键在于构造精准的正则匹配模式,而非逐个查找或分步截取。
✅ 正确解法:使用 replaceAll() 与点号通配符
正则表达式中的 . 表示“匹配任意单个字符(除换行符外)”,因此 "§." 可精确匹配 § 后紧跟的任意一个字符组成的二元子串。调用 replaceAll("§.", "") 即可一次性清除所有此类片段:
String input = "§a§b Text";
String result = input.replaceAll("§.", "");
System.out.println(result); // 输出: " Text"该方法简洁、高效,且天然支持多实例匹配(replaceAll 默认全局替换),无需循环或额外逻辑。
⚠️ 注意事项
-
. 不匹配换行符:若原始字符串含跨行内容(如 §
),默认 . 不会匹配
。如需包含,请启用 DOTALL 模式:
str.replaceAll("(?s)§.", ""); - 特殊字符转义:§ 本身不是正则元字符,无需转义;但若替换目标是 *, ., +, ?, [, ] 等,则需前置反斜杠(如 \*.)。
- 性能考量:对超长字符串(如 MB 级文本),正则引擎仍具良好性能;但若仅需简单固定长度剔除,也可考虑 StringBuilder 手动遍历——不过对于本场景,正则方案更清晰、安全、不易出错。
? 总结
str.replaceAll("§.", "") 是解决“删除指定字符及其后一个任意字符”问题的标准、推荐方案。它语义明确、代码简短、符合Java字符串不可变特性,且经JVM优化,在绝大多数业务场景中兼具可读性与执行效率。掌握 . 的通配含义及 replaceAll 的全局行为,是熟练运用Java正则处理文本的基础能力之一。
立即学习“Java免费学习笔记(深入)”;










