为什么以下Java代码段会在第三行代码中抛出StringIndexOutOfBoundsException?
String str = "1234567890";
String sub1 = str.substring(0, 3);
String sub2 = str.substring(4, 1);
我原以为上面代码的结果是sub1包含“123”而sub2包含“5”,但我得到了上面提到的异常。第一个子字符串调用是否对正在操作的字符串有副作用?
答案 0 :(得分:5)
因为beginIndex
大于endIndex
请参阅doc:
<强>抛出:强> IndexOutOfBoundsException - 如果beginIndex为负数,或者endIndex大于此String对象的长度,或者 beginIndex 是 更大 而不是 endIndex。
答案 1 :(得分:1)
查看doc:String.substring(beginIndex,endIndex)
答案 2 :(得分:0)
方法substring()
的第一个参数是选择开头的索引,第二个是结束的索引,而不是您希望选择的长度,正如您显然所想的那样。
请参阅文档here。