You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

递归实现字符串隔位大小写转换结果不符问题求助

问题分析

你当前的递归逻辑错误在于依赖returned_str.length()判断字符位置,但递归是从后往前处理字符串,returned_str的长度是剩余子串的长度,无法对应原字符串中字符的真实索引位置。比如处理"Even"的第二个'e'时,returned_str.length()为1(对应"n"的长度),导致错误地将本应小写的'e'转为大写,最终得到"evEn"而非预期的"eVeN"。

解决方案

要实现正确的隔位大小写转换,核心是确定当前字符在原字符串中的索引位置,而非依赖子串处理后的长度。可以通过重载递归方法,将原字符串的总长度传入辅助函数,以此计算当前字符的索引:

public static String camelCaseRecursive(String w) {
    // 入口方法,传入原字符串和其总长度
    return camelCaseHelper(w, w.length());
}

private static String camelCaseHelper(String currentStr, int originalLength) {
    // 递归终止条件:空字符串直接返回
    if (currentStr.isEmpty()) {
        return "";
    }
    
    char currentChar = currentStr.charAt(0);
    // 计算当前字符在原字符串中的索引:原长度 - 当前子串长度
    int currentIndex = originalLength - currentStr.length();
    
    // 根据索引奇偶性转换大小写:偶数索引转小写,奇数索引转大写
    if (currentIndex % 2 == 0) {
        currentChar = Character.toLowerCase(currentChar);
    } else {
        currentChar = Character.toUpperCase(currentChar);
    }
    
    // 递归处理剩余子串,拼接结果
    return currentChar + camelCaseHelper(currentStr.substring(1), originalLength);
}
逻辑说明
  1. 入口方法camelCaseRecursive负责初始化,将原字符串和其总长度传入辅助递归方法。
  2. 辅助方法中,通过originalLength - currentStr.length()计算当前字符在原字符串中的真实索引(从0开始)。
  3. 按需求转换大小写:偶数索引(0、2、4...)转小写,奇数索引(1、3、5...)转大写(可根据需求调整规则)。
  4. 递归处理剩余子串,将当前处理后的字符与子串处理结果拼接,最终返回完整字符串。

测试验证:

  • 输入"Even",得到eVeN,符合预期。
  • 输入"Hello World",得到hElLo wOrLd,符合预期。

内容的提问来源于stack exchange,提问作者Branto

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 01:52:54