如何用数组生成原数组逆序字符?遇索引越界报错求解答
解决字符串逆序时的"String index out of range: -1"错误
这个错误很好理解——你在代码里尝试访问字符串的负数索引了!Java里字符串的索引是从0开始的,最小合法索引是0,最大是字符串长度-1,一旦索引小于0,就会抛出这个StringIndexOutOfBoundsException。
结合你的需求和代码片段来看,大概率是你实现reverse方法时踩了这两个坑之一:
- 没处理空字符串的情况:如果用户输入空字符串,
str.length()会返回0,那str.length()-1就是-1,这时候直接用这个索引去取字符,肯定报错。 - 循环逻辑没控制好:比如你从字符串最后一位开始往前遍历,但循环条件写错了,导致索引减到-1的时候还在执行
charAt()操作。
给你两个靠谱的实现方案,你可以直接用:
方案1:手动循环实现(适合理解原理)
public static String reverse(String str) { // 先处理空字符串或null的情况,避免后续索引出错 if (str == null || str.isEmpty()) { return str; } StringBuilder reversed = new StringBuilder(); // 从最后一个字符遍历到第一个字符,确保索引始终在合法范围内 for (int i = str.length() - 1; i >= 0; i--) { reversed.append(str.charAt(i)); } return reversed.toString(); }
方案2:用StringBuilder自带的reverse方法(简洁高效)
Java已经帮我们封装好了字符串逆序的方法,直接用就行:
public static String reverse(String str) { if (str == null || str.isEmpty()) { return str; } return new StringBuilder(str).reverse().toString(); }
举个反例看看你之前可能写错的地方,比如这种错误写法就会触发你遇到的异常:
// 错误示例!不要这么写 public static String reverse(String str) { String reversed = ""; int index = str.length() - 1; while (true) { reversed += str.charAt(index); index--; // 没判断index >=0,当index降到-1时还会执行charAt(-1) if (index < 0) break; } return reversed; }
这里的问题是,先执行了charAt(index)再判断索引,当index变成-1的时候,已经触发了异常。
总之,核心就是要保证所有访问字符串的索引都在0 <= 索引 < 字符串长度这个范围内,同时别忘了处理空输入的情况~
内容的提问来源于stack exchange,提问作者Lotun Kanji
相关产品推荐
相关产品推荐

