
Java 的 String.replace() 仅支持字面量替换,若需用正则匹配并替换(例如将首个点号前的全部内容替换为新字符串),必须改用 replaceAll() 或 replaceFirst()。
java 中使用正则表达式替换字符串前缀(如点号前的部分)
在 Java 中,String.replace(CharSequence target, CharSequence replacement) 方法不支持正则表达式——它只执行严格的字面量(literal)匹配与替换。因此,即使你在 regex101 上验证通过的正则 \S+(?=\.)(匹配点号前连续非空白字符),直接传入 replace() 也不会生效,而是被当作普通字符串查找,导致替换失败。
✅ 正确做法是使用支持正则的 replaceAll()(全局替换)或 replaceFirst()(仅替换首次匹配):
List<String> newConfigDto = new ArrayList<>();
for (String s : configDto) {
// ✅ 使用 replaceFirst:精准替换第一个点号前的部分
newConfigDto.add(s.replaceFirst("^\S+(?=\.)", "ANP_TRACKING_VIEW"));
}? 关键说明:
将后端 Java 接口文档转换为前端 TypeScript 类型定义(interface / type)。输入:飞书文档、Spring Boot 接口文档、Swagger/OpenAPI、手写 API 文档等。输出:包含请求参数与响应结果的 .md 文件,含完整 JSDoc 注释。触发关键词:Java 转 TS、接口转换、生成前端类型、接口文档转 TypeScript、DTO/VO/BO 转 interface、后端文档转前端类型、生成接口类型、类型定义生成。
- ^\S+(?=\.):^ 确保从字符串开头匹配;\S+ 匹配一个或多个非空白字符;(?=\.) 是正向先行断言(positive lookahead),要求其后紧邻一个字面量点号(需双反斜杠转义);
- 使用 replaceFirst() 而非 replaceAll() 更安全——避免意外匹配中间或末尾的点号前内容(如 foo.bar.baz 中只换 foo,而非 bar);
- 若原始字符串不含点号,该正则不匹配,原串保持不变,行为稳健。
⚠️ 注意事项:
立即学习“Java免费学习笔记(深入)”;
- 不要遗漏 ^ 锚定开头,否则可能错误匹配子串(如 xanp_packlistepos.warenausgang 中的 anp_packlistepos);
- Java 字符串中反斜杠需双写(\. 表示正则中的 .,即匹配真实点号);
- Vaadin 14 + Corretto 17 环境完全兼容此写法,无版本兼容性问题。
? 小结:正则替换 ≠ 字符串替换。牢记 replace()(字面量)、replaceAll()/replaceFirst()(正则)的职责边界,是写出可靠文本处理逻辑的基础。

















