求助:用循环将含多下划线的字符串转为驼峰命名(代码修复)
下划线转驼峰命名(camelCase)的正确循环实现
原代码问题分析
- 仅处理第一个下划线:通过
indexOf("_",0)只获取了第一个下划线的位置,完全没处理后续的下划线,这是dog_cat_dog只转换出dogCat_dog的核心原因。 - 循环逻辑无效:循环遍历每个字符,但仅当
i等于第一个下划线索引时才执行转换逻辑,其余时刻重复赋值lowerCase为字符串开头到第一个下划线的片段,没有逐步构建最终结果。 - 字符拼接错误:处理下划线后直接拼接
substring(index_+2),导致后续的下划线和未转换字符原封不动保留,没有继续处理。
正确的循环实现代码
public String underscoreToCamel(String textToConvert) { StringBuilder camelCase = new StringBuilder(); boolean needUpper = false; for (int i = 0; i < textToConvert.length(); i++) { char c = textToConvert.charAt(i); if (c == '_') { needUpper = true; continue; // 下划线不加入结果 } if (needUpper) { camelCase.append(Character.toUpperCase(c)); needUpper = false; } else { camelCase.append(c); } } return camelCase.toString(); }
代码逻辑说明
- 用
StringBuilder做字符串拼接,比直接String相加效率更高,适合处理任意长度的字符串。 - 用
needUpper标记位控制字符转换:- 遇到下划线时,标记下一个需要转大写的字符,跳过下划线本身。
- 遇到非下划线字符时,如果标记位为
true,就转成大写加入结果,然后重置标记;否则直接加入原字符。
- 这种遍历方式会处理字符串中所有下划线,不管数量多少,都能正确输出驼峰格式。
测试示例:输入dog_cat_dog,输出dogCatDog,完全符合预期。
内容的提问来源于stack exchange,提问作者poop monkey
相关产品推荐
相关产品推荐

