如何在Java中移除短横线并将其后字母转为大写:处理"the-stealth-warrior"
正确实现短横线转驼峰命名的Java方法
原代码的问题
你的代码存在几个关键问题导致无法实现需求:
- 没有用可变字符串容器(比如
StringBuilder)存储处理后的结果,所有操作都在临时char变量上进行,最终没有保留任何输出。 - 遇到
'-'时逻辑错误:已经将下一个字符转成大写,但后续的newName += name.charAt(i + 1)会把char类型转为int做加法,完全偏离预期。 - 未处理非
'-'的普通字符,这些字符没有被加入结果中。
方法一:手动遍历实现(高效可控)
public class Main { public static void main(String[] args) { String name = "the-stealth-warrior"; StringBuilder result = new StringBuilder(); boolean capitalizeNext = false; for (char c : name.toCharArray()) { if (c == '-') { capitalizeNext = true; } else { result.append(capitalizeNext ? Character.toUpperCase(c) : c); capitalizeNext = false; } } System.out.println(result.toString()); // 输出:theStealthWarrior } }
这个实现的核心逻辑:
- 用
StringBuilder高效拼接字符串,避免频繁创建String对象带来的性能损耗。 - 用
capitalizeNext标记下一个字符是否需要大写,遇到'-'时设置标记并跳过该符号。 - 遍历每个字符,根据标记决定是否转大写,处理完成后重置标记。
方法二:正则表达式实现(简洁)
如果追求代码简洁,可以用正则表达式快速实现:
public class Main { public static void main(String[] args) { String name = "the-stealth-warrior"; String result = name.replaceAll("-(.)", match -> match.group(1).toUpperCase()); System.out.println(result); // 输出:theStealthWarrior } }
逻辑说明:
- 正则
-(.)匹配短横线及其后的一个字符,(.)是捕获组,用来提取短横线后的字母。 - 通过lambda表达式将捕获到的字母转成大写,替换掉匹配的
-x部分。
内容的提问来源于stack exchange,提问作者Albear Mousa
相关产品推荐
相关产品推荐

