求助:递归实现字符串指定起止字符间内容提取的代码问题
递归提取字符串起止字符间内容的问题解决
原代码存在的问题
- 未处理空字符串边界场景,直接调用
charAt(0)会抛出StringIndexOutOfBoundsException - 用到未定义的
str变量,编译无法通过 - 第一个递归分支
getmiddle(s.substring(1), start, end)没有返回值,相当于无效调用 - 逻辑混淆了「寻找起始字符」和「收集中间内容」两个核心阶段
修正后的递归思路
递归函数需要区分三个执行状态:
- 未找到起始字符:继续递归处理字符串的剩余部分
- 已找到起始字符但未遇到结束字符:将当前字符加入结果,继续递归剩余部分
- 遇到结束字符:停止递归,返回空字符串
可运行的完整代码
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':
- 递归跳过前两个字符
j、a,遇到v后进入收集阶段 - 依次收集
a、s、c、r,直到遇到i时停止递归 - 最终拼接返回结果
"ascr",符合需求
内容的提问来源于stack exchange,提问作者Anh Nghiêm
相关产品推荐
相关产品推荐

