
本文介绍在 java 中将类似 `this_is_an_example_string` 的全大写下划线命名字符串,高效、简洁地转换为 `this.is.an.example.string` 格式的标准做法,核心仅需两步:转小写 + 下划线替换为点号。
在 Java 开发中,常需处理不同命名规范之间的转换,例如将常量风格(SCREAMING_SNAKE_CASE)映射为域名、配置键或包路径风格(lower.dot.case)。这种转换逻辑简单但高频,应追求可读性、健壮性与性能兼顾。
最直接且推荐的实现方式如下:
String input = "THIS_IS_AN_EXAMPLE_STRING";
String result = input.toLowerCase().replaceAll("_", ".");
System.out.println(result); // 输出:this.is.an.example.string✅ 为什么这是最优解?
- toLowerCase() 安全处理 ASCII 字母(如 _ 不受影响),且对空字符串、null(需前置判空)友好;
- replaceAll("_", ".") 中的 _ 是普通字符,无需正则转义(_ 在正则中无特殊含义),因此比 replaceAll("\\_", ".") 更简洁、更高效;
- 整个链式调用无副作用、不可变,符合函数式编程习惯,易于嵌入流式处理或工具方法中。
⚠️ 注意事项:
- 若输入可能为 null,务必先校验,避免 NullPointerException:
String result = Optional.ofNullable(input) .map(s -> s.toLowerCase().replaceAll("_", ".")) .orElse(""); - 若字符串中存在连续下划线(如 "A__B"),replaceAll 会将其转为连续点号("a..b"),这通常符合预期;若需压缩多个 _ 为单个 .,可改用 replaceAll("_+", ".");
- 不建议使用 split("_") 后拼接,因其涉及数组创建、循环及 StringBuilder 开销,在简单场景下过度复杂化。
? 扩展建议(非必需):
可封装为静态工具方法提升复用性:
public static String toLowerDotCase(String str) {
return str == null ? "" : str.toLowerCase().replaceAll("_", ".");
}综上,str.toLowerCase().replaceAll("_", ".") 是语义清晰、性能优良、零依赖的黄金方案——它用最少的代码,精准解决命名规范转换这一典型问题。









