- 理解
StringIndexOutOfBoundsException
异常StringIndexOutOfBoundsException
是Java中的一个运行时异常。它表示在对字符串进行索引操作时,使用的索引超出了字符串的有效范围。在Java中,字符串的索引是从0开始的,例如对于字符串"abc"
,有效索引范围是0到2。如果尝试访问索引为3或负数的位置,就会抛出这个异常。
- 常见的引发原因及解决方法
- 使用了错误的索引值访问字符串中的字符
- 示例代码:
public class Main { public static void main(String[] args) { String str = "Hello"; char c = str.charAt(10); } }
- 在这个例子中,字符串
"Hello"
的长度为5,有效的索引范围是0 - 4。但是代码试图访问索引为10的字符,这就会抛出StringIndexOutOfBoundsException
异常。 - 解决方法:
- 确保在访问字符串中的字符时,索引值在
0
到string.length() - 1
的范围内。可以在访问之前进行检查,例如:public class Main { public static void main(String[] args) { String str = "Hello"; int index = 10; if (index >= 0 && index < str.length()) { char c = str.charAt(index); System.out.println(c); } else { System.out.println("索引超出范围"); } } }
- 确保在访问字符串中的字符时,索引值在
- 示例代码:
- 在使用
substring
方法时指定了错误的参数- 示例代码:
public class Main { public static void main(String[] args) { String str = "Java"; String sub = str.substring(0, 5); } }
- 对于
substring
方法,第一个参数是起始索引,第二个参数是结束索引(不包括该索引处的字符)。在这个例子中,字符串"Java"
的长度为4,而代码中指定的结束索引为5,超出了字符串的范围,会导致异常。 - 解决方法:
- 正确指定
substring
方法的参数。确保起始索引和结束索引都在合理的范围内。例如,如果想获取整个字符串,可以使用substring(0, str.length())
或者直接使用str
本身。如果想获取一部分字符串,比如从索引1开始到最后,可以使用str.substring(1)
。修改上面的代码如下:public class Main { public static void main(String[] args) { String str = "Java"; String sub = str.substring(0, 4); System.out.println(sub); } }
- 正确指定
- 示例代码:
- 在循环中对字符串进行索引操作时,循环条件错误
- 示例代码:
public class Main { public static void main(String[] args) { String str = "Python"; for (int i = 0; i <= str.length(); i++) { System.out.print(str.charAt(i)); } } }
- 在这个循环中,循环条件是
i <= str.length()
,当i
等于字符串长度时,charAt
方法会因为索引超出范围而抛出异常。因为字符串的有效索引是小于其长度的。 - 解决方法:
- 调整循环条件为
i < str.length()
,这样可以确保在字符串的有效索引范围内进行操作。修改后的代码如下:public class Main { public static void main(String[] args) { String str = "Python"; for (int i = 0; i < str.length(); i++) { System.out.print(str.charAt(i)); } } }
- 调整循环条件为
- 示例代码:
- 使用了错误的索引值访问字符串中的字符