Java递归逐词打印字符串方法异常求助:原代码输出整串而非单个单词
递归实现逐词打印字符串的问题修复
Hey,我明白你想通过递归实现逐词打印字符串的需求,咱们先来拆解现有代码里的问题,再一步步修正它:
原代码的问题分析
你的代码里有两个关键问题导致它直接输出整个字符串:
- 判断条件过于局限:
s.indexOf(" ") == 1这个条件只有当空格恰好出现在字符串的第2个字符(索引1)时才会触发递归,绝大多数场景都不满足这个要求,所以直接走到System.out.println(s)输出了完整字符串。 - 递归逻辑顺序和截取错误:就算触发了递归,你把
substring后的部分加\n再传入,而且没有先打印当前的单词,反而直接递归,最终还是会输出完整内容。
修正后的递归实现
咱们调整逻辑,每次递归先提取并打印当前字符串的第一个单词,再把剩下的部分传给下一层递归:
public static void stringByWords(String s) { // 基线条件:字符串为空时终止递归 if (s.isEmpty()) { return; } int spaceIndex = s.indexOf(" "); if (spaceIndex != -1) { // 提取并打印第一个单词 System.out.println(s.substring(0, spaceIndex)); // 递归处理空格之后的剩余字符串 stringByWords(s.substring(spaceIndex + 1)); } else { // 没有空格了,打印最后一个单词 System.out.println(s); } }
递归逻辑说明
- 每次进入方法,先检查字符串是否为空,是空就直接返回(递归的终止条件)。
- 找到第一个空格的位置:如果存在空格,就截取从开头到空格前的部分(第一个单词)打印,然后递归调用方法处理空格之后的剩余字符串。
- 如果找不到空格,说明当前字符串就是最后一个单词,直接打印即可。
这样运行的话,就能实现逐词打印的效果啦~
内容的提问来源于stack exchange,提问作者Ben Nutter
相关产品推荐
相关产品推荐

