字符串重复字符检测代码触发StringIndexOutOfBoundsException运行时错误求助
排查StringIndexOutOfBoundsException错误并修复重复字符检测代码
咱们先直接说触发StringIndexOutOfBoundsException的核心原因:Java里字符串的索引是从0开始计数的,最大的有效索引是字符串长度-1,你的代码里循环的索引范围完全踩了这个坑:
错误点拆解
- 外层循环
for(int count=1; count<=name.length(); count++):当count等于name.length()时,name.charAt(count)访问的是字符串不存在的位置(比如长度为5的字符串,最大索引是4),直接触发越界。 - 内层循环
for(int down = name.length(); down>0; down--):同样,初始值down = name.length()本身就是无效索引;而且结束条件down>0会漏掉索引为0的字符,导致检测不完整。
另外你的代码还有逻辑问题:每次比较两个字符就立刻输出结果,这会导致控制台反复打印重复/不重复的信息,完全不符合“检测是否存在重复字符”的需求——咱们应该是遍历完所有可能的字符对,确定是否存在重复后,只输出一次结果。
解决方案
方案1:修正索引+优化双重循环逻辑
调整循环的索引范围,同时用一个标记变量记录是否找到重复:
import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); String name = sc.next().trim(); boolean hasDuplicate = false; // 外层循环从第一个字符(索引0)到倒数第二个字符 for(int count = 0; count < name.length() - 1; count++) { char ch = name.charAt(count); // 内层循环从外层字符的下一个位置开始,避免重复比较 for(int down = count + 1; down < name.length(); down++) { char sh = name.charAt(down); if(ch == sh) { hasDuplicate = true; // 找到重复后直接跳出所有循环,提升效率 break; } } if(hasDuplicate) { break; } } // 遍历结束后统一输出结果 if(hasDuplicate) { System.out.println("There is a repeated character"); } else { System.out.println("There is no repeated character"); } sc.close(); } }
方案2:用Set集合简化检测(更高效简洁)
利用Set集合不允许重复元素的特性,遍历字符串时尝试添加字符,如果添加失败说明存在重复:
import java.util.HashSet; import java.util.Scanner; import java.util.Set; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); String name = sc.next().trim(); Set<Character> charSet = new HashSet<>(); boolean hasDuplicate = false; for(char c : name.toCharArray()) { if(!charSet.add(c)) { hasDuplicate = true; break; } } if(hasDuplicate) { System.out.println("There is a repeated character"); } else { System.out.println("There is no repeated character"); } sc.close(); } }
补充说明
- 我把原代码里的"repeated word"改成了"repeated character",因为你的代码是检测字符重复,不是单词重复,表述更准确。
- 记得用完Scanner后调用
sc.close()释放资源,养成良好的编码习惯。
内容的提问来源于stack exchange,提问作者Shrey Joshi
相关产品推荐
相关产品推荐

