
本文介绍如何用最简洁、高效的方式将形如 "this_is_an_example" 的全大写下划线命名字符串,转换为小写点分隔格式(如 "this.is.an.example"),核心只需两步:统一转小写 + 下划线替换为点号。
在 Java 开发中,常需处理不同命名规范间的字符串转换,例如将常量风格(UPPER_SNAKE_CASE)映射为配置键、包路径或属性名(lower.dotted.case)。这种转换逻辑简单但高频,应追求可读性强、无依赖、零异常风险的实现。
最直接且推荐的方案仅需一行代码:
String result = input.toLowerCase().replaceAll("_", ".");✅ 说明与优势:
- toLowerCase() 安全处理所有 ASCII 字母及常见 Unicode 大写字母(如 À, Ö),符合国际化需求;
- replaceAll("_", ".") 中的 _ 是普通字符,无需正则转义(_ 在正则中无特殊含义),因此 replaceAll 与 replace 效果一致,但 replaceAll 更符合“模式替换”的语义直觉;
- 若追求极致性能且确认输入仅含 ASCII,也可使用 replace("_", ".")(底层调用 String.replace(CharSequence, CharSequence),不触发正则引擎,略快于 replaceAll);
⚠️ 注意事项:
立即学习“Java免费学习笔记(深入)”;
- 不要误写为 replaceAll("\_", ".") —— 双反斜杠是冗余转义,虽不报错但降低可读性;
- 避免先 split("_") 再 join("."),该方式创建中间数组,内存开销更大,且需额外处理空字符串(如 "A__B");
- 若输入可能为 null,需前置判空,例如:
String result = (input == null) ? null : input.toLowerCase().replaceAll("_", ".");
? 扩展建议(非必需):
对于更复杂的驼峰/蛇形互转场景,可考虑 Apache Commons Lang 的 StringUtils(如 uncapitalize() 配合正则),但本例中标准库已完全胜任——简单问题,勿过早引入外部依赖。
综上,str.toLowerCase().replaceAll("_", ".") 是语义清晰、性能可靠、零依赖的标准解法,适用于 Java 8+ 所有版本。









