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

Java递归逐词打印字符串方法异常求助:原代码输出整串而非单个单词

递归实现逐词打印字符串的问题修复

Hey,我明白你想通过递归实现逐词打印字符串的需求,咱们先来拆解现有代码里的问题,再一步步修正它:

原代码的问题分析

你的代码里有两个关键问题导致它直接输出整个字符串:

  1. 判断条件过于局限:s.indexOf(" ") == 1这个条件只有当空格恰好出现在字符串的第2个字符(索引1)时才会触发递归,绝大多数场景都不满足这个要求,所以直接走到System.out.println(s)输出了完整字符串。
  2. 递归逻辑顺序和截取错误:就算触发了递归,你把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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:53:42