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

使用while循环删除字符串指定字符时陷入死循环,求排查解决

问题分析与修复

核心问题

  1. 无限循环:找到要移除的字符时,仅生成了新字符串removeAll,但未将其赋值回处理对象,且i没有递增。比如处理"yummy"的'm'时,i=2每次都能匹配原字符串的'm',循环永远卡在这一步。
  2. 结果无法打印:由于循环永远无法结束,后续的System.out.println(removeAll)根本执行不到。

修复后的代码

else if (command.equalsIgnoreCase("remove all")) {
    System.out.println("Enter the character to remove");
    removedLetter = keyboard.next().charAt(0);

    // 初始化removeAll为原始输入字符串
    removeAll = userInput;
    int i = 0;
    while (i < removeAll.length()) {
        if (removeAll.charAt(i) == removedLetter) {
            // 移除当前位置的字符,生成新字符串
            String wordHolderOne = removeAll.substring(0, i);
            String wordHolderTwo = removeAll.substring(i + 1);
            removeAll = wordHolderOne + wordHolderTwo;
            // 移除字符后i不递增,后续字符前移,需重新检查当前位置
        } else {
            // 无匹配时i递增,检查下一个字符
            i++;
        }
    }
    System.out.println(removeAll);
}

关键修改点

  • 初始化removeAll:一开始就把原始输入赋值给removeAll,避免未初始化的问题。
  • 更新操作对象:用removeAll代替userInput作为循环处理的对象,每次移除字符后直接更新removeAll,确保下一次循环处理的是最新字符串。
  • 调整索引逻辑:匹配到目标字符时不递增i——移除当前字符后,后续字符会前移一位,当前i位置的字符已更新,需要重新检查;仅当未匹配时才递增i,继续下一个位置的检查。

修改后输入"yummy"移除'm',会得到结果"yuy",循环能正常结束并打印输出。

内容的提问来源于stack exchange,提问作者joel

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 22:20:33