
使用 str.tolowercase().replaceall("_", ".") 即可一行完成下划线命名(upper_snake_case)到小写点分隔(lower.dotted.case)的转换,简洁高效,无需额外依赖。
在 Java 开发中,常需处理不同命名规范间的字符串转换。例如,将配置项、枚举名或 API 常量(如 "DATABASE_URL_TIMEOUT")标准化为小写、以点号分隔的路径式格式(如 "database.url.timeout"),便于日志记录、属性绑定或 DSL 构建。
最直接且推荐的实现方式是链式调用两个内置字符串方法:
String input = "THIS_IS_AN_EXAMPLE_STRING";
String result = input.toLowerCase().replaceAll("_", ".");
System.out.println(result); // 输出:this.is.an.example.string✅ 优势说明:
- toLowerCase() 安全处理 ASCII 及常见 Unicode 字符(如带重音符号的字母,在默认 Locale 下表现合理;如需严格遵循特定区域规则,可显式传入 Locale.ROOT);
- replaceAll("_", ".") 中的 _ 是普通字符,无需转义(与正则元字符不同),因此直接使用字面量 "_" 即可;若误写为 replaceAll("\\_", ".") 反而冗余且易出错;
- 整个操作无副作用、不可变、线程安全,符合函数式编程习惯。
⚠️ 注意事项:
立即学习“Java免费学习笔记(深入)”;
- 若输入字符串可能为 null,需提前判空,否则抛 NullPointerException:
String result = (input != null) ? input.toLowerCase().replaceAll("_", ".") : ""; - 该方案不处理连续下划线(如 "A__B" → "a..b")或首尾下划线(如 "_START" → ".start")。如需规范化(例如压缩多下划线、裁剪边界),应先用 replaceAll("_+", "_").replaceAll("^_+|_+$", "") 预处理;
- replaceAll() 底层使用正则引擎,但因仅匹配单字符 _,性能与 replace("_", ".") 几乎一致;若追求极致性能且确认无正则需求,可用 replace()(它不解析正则,语义更清晰):
String result = input.toLowerCase().replace("_", ".");
? 总结:对于标准 UPPER_SNAKECASE → lower.dotted.case 转换,`toLowerCase().replace("", ".")` 是最简、最清晰、最健壮的选择——语义明确、零依赖、零异常风险(除 null 外)、易于测试与维护。









