如何用递归方法检查字符串?递归统计删除"chicken"次数需求问询
用迭代(循环)实现统计并移除"chicken"的完整方案
嘿,我太懂这种感觉了——明明被要求用递归方法统计并删除字符串里的所有"chicken"实例,但写着写着发现用循环实现起来轻松太多,完全不用纠结递归的栈逻辑!
先把你给出的代码片段补全成完整可运行的版本,实现统计移除次数+删除所有"chicken"的功能:
package recursive_labs; import java.util.Scanner; public class ChickenAnhilator { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); System.out.print("输入要检查的字符串:"); String input = scanner.nextLine(); int removedCount = countAndEliminateChicken(input); System.out.println("总共移除了 " + removedCount + " 个\"chicken\""); scanner.close(); } public static int countAndEliminateChicken(String testStr) { String target = "chicken"; int count = 0; StringBuilder modifiedStr = new StringBuilder(testStr); // 循环查找并移除所有目标字符串 int foundIndex = modifiedStr.indexOf(target); while (foundIndex != -1) { count++; // 删除找到的"chicken" modifiedStr.delete(foundIndex, foundIndex + target.length()); // 继续查找下一个匹配项 foundIndex = modifiedStr.indexOf(target); } // 如果需要查看移除后的结果,解开下面的注释 // System.out.println("移除后的字符串:" + modifiedStr.toString()); return count; } }
为什么这个写法更顺手?
- 用
StringBuilder做字符串修改,比直接拼接字符串高效多了,避免频繁生成新的字符串对象 - 循环逻辑直白:找到一个删一个,计数加一,直到找不到为止,完全不用考虑递归的终止条件和栈深度问题
- 调试起来也更方便,每一步的字符串状态都很容易追踪
如果之后还是需要补一个递归版本作为对比(毕竟题目要求了),这里也给你写一个简单的实现参考:
public static int recursiveChickenCounter(String testStr) { String target = "chicken"; int index = testStr.indexOf(target); if (index == -1) { // 递归终止条件:找不到"chicken"了 return 0; } // 移除当前找到的"chicken",递归处理剩余字符串,累加计数 return 1 + recursiveChickenCounter( testStr.substring(0, index) + testStr.substring(index + target.length()) ); }
不过说实话,在这个场景下迭代写法确实更优——递归虽然符合题目要求,但如果字符串特别长,还可能触发栈溢出的问题。
内容的提问来源于stack exchange,提问作者BigNoseJones
相关产品推荐
相关产品推荐

