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

求助:递归实现字符串指定起止字符间内容提取的代码问题

递归提取字符串起止字符间内容的问题解决

原代码存在的问题

  • 未处理空字符串边界场景,直接调用charAt(0)会抛出StringIndexOutOfBoundsException
  • 用到未定义的str变量,编译无法通过
  • 第一个递归分支getmiddle(s.substring(1), start, end)没有返回值,相当于无效调用
  • 逻辑混淆了「寻找起始字符」和「收集中间内容」两个核心阶段

修正后的递归思路

递归函数需要区分三个执行状态:

  1. 未找到起始字符:继续递归处理字符串的剩余部分
  2. 已找到起始字符但未遇到结束字符:将当前字符加入结果,继续递归剩余部分
  3. 遇到结束字符:停止递归,返回空字符串

可运行的完整代码

public static String getmiddle(String s, char start, char end) {
    // 边界条件:空字符串直接返回空
    if (s.isEmpty()) {
        return "";
    }

    char firstChar = s.charAt(0);
    // 还没找到起始字符,递归处理剩下的部分
    if (firstChar != start) {
        return getmiddle(s.substring(1), start, end);
    } else {
        // 找到起始字符,进入内容收集阶段
        String rest = s.substring(1);
        if (rest.isEmpty()) {
            return "";
        }
        // 遇到结束字符,停止收集
        if (rest.charAt(0) == end) {
            return "";
        }
        // 收集当前字符,继续递归处理剩余内容
        return rest.charAt(0) + getmiddle(rest, start, end);
    }
}

代码运行验证(以你的例子为例)

输入字符串"javascript"、起始字符'v'、结束字符'i':

  1. 递归跳过前两个字符j、a,遇到v后进入收集阶段
  2. 依次收集a、s、c、r,直到遇到i时停止递归
  3. 最终拼接返回结果"ascr",符合需求

内容的提问来源于stack exchange,提问作者Anh Nghiêm

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 18:06:05