使用正则表达式可将驼峰命名转为下划线命名:先匹配“小写字母或数字后紧跟大写字母”的位置(如(?

Java中将驼峰命名(如 userName)转为下划线命名(如 user_name),用正则表达式是最简洁的方式,核心在于识别大小写字母交界处并插入下划线。
匹配大写字母前的位置并插入下划线
关键思路是:在小写字母或数字后面、紧接着大写字母的位置插入下划线。使用 (? 这个零宽断言组合:
(? 表示“前面是一个小写字母或数字”(<code>\p{Ll}是 Unicode 小写字母)-
(?=\p{Lu})表示“后面是一个大写字母”(\p{Lu}是 Unicode 大写字母) - 两者合起来,精准定位
userA中r和A之间的空隙
统一转小写 + 替换
替换后需把整个字符串转为小写,否则会得到 user_Name 而非 user_name:
- 先用
replaceAll("(? 插入下划线 - 再调用
toLowerCase() - 完整写法:
str.replaceAll("(?
处理连续大写字母的边界情况
对类似 XMLParser 或 IOStream 这类缩写连写,单纯上面规则会变成 x_m_l_parser,不符合预期。可增强正则,区分“大写+小写”和“大写+大写+小写”:
当用户要求为 Java 代码添加注释、修改注释、审查注释、整理注释格式,或要求按照代码注释规范处理 Java 文件时,使用本技能。本技能用于统一生成和维护 Java 类注释模板、按 Git 对比 release 判断版本号、补充每行代码上方中文块注释、调整注释空行规则,并保持 Java 文件 UTF-8 无 BOM 编码。典型触发场景包括:补充类注释、更新 @version、检查 @author 来源、整理行尾注释、把注释放到代码上一行、检查注释是否符合规范、构建前检查 Java 注释风格。
- 优先匹配
(?(小写→大写) - 再匹配
(?(大写→大写+小写,如 <code>XMLParser中M和P之间) - 合并写法:
str.replaceAll("(?
实际使用示例
推荐封装成工具方法,兼顾可读与健壮性:
public static String camelToUnderscore(String str) {
if (str == null || str.isEmpty()) return str;
return str.replaceAll(
"(?
<p>测试效果:<br></p><pre class="brush:php;toolbar:false;">camelToUnderscore("userName") → "user_name"<br>
camelToUnderscore("XMLHttpRequest") → "xml_http_request"<br>
camelToUnderscore("iOSVersion") → "ios_version"Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










