使用while循环删除字符串指定字符时陷入死循环,求排查解决
问题分析与修复
核心问题
- 无限循环:找到要移除的字符时,仅生成了新字符串
removeAll,但未将其赋值回处理对象,且i没有递增。比如处理"yummy"的'm'时,i=2每次都能匹配原字符串的'm',循环永远卡在这一步。 - 结果无法打印:由于循环永远无法结束,后续的
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
相关产品推荐
相关产品推荐

