字符串索引超出范围异常java

时间:2013-11-23 12:12:04

标签: java exception substring

从我的班级中调用函数时出现以下错误: java.lang.StringIndexOutOfBoundsException:字符串索引超出范围:-1 虽然我使用系统打印来查看我在substring()函数中传递的输入,但一切似乎都是正确的。函数isContained()返回一个布尔值,用于定义作为参数传递的子字符串是否在单词列表中。我的代码是:

for(int i=0; i<=size; i++)
    for(int j=i+1; j<=size; j++)
        if(isContained(str.substring(i,j-i)))
            System.out.println(str.substring(i,j-i));

其中size是字符串(str)的大小我在函数中传递

3 个答案:

答案 0 :(得分:4)

您正在呼叫str.substring(i, j-i),这意味着substring(beginIndex, endIndex),而不是substring(beginIndex, lengthOfNewString)

假设这种方法的一个原因是endIndex大于或等于beginIndex,如果不是新索引的长度将是负数且其值将在StringIndexOutOfBoundsException中抛出。

也许你应该改变你的方法做str.substring(i, j)之类的事情?


如果sizestr的长度,那么

for (int i = 0; i <= size; i++)

应该是

for (int i = 0; i < size; i++)

答案 1 :(得分:0)

我认为你需要改变循环条件,这就是问题所在。当您执行<=size并且索引从i=0开始时,您将再循环一次迭代。你可以改变这个

for(int i=0; i<=size; i++)

for(int i=0; i<size; i++)

并且还要注意内循环条件。

答案 2 :(得分:0)

IndexOutOfBoundsException - 如果beginIndex为负数,或者endIndex大于此String对象的长度,或者beginIndex大于endIndex。

实际上,你的子串函数的右边缘可能低于左边的。例如,当i=(size-1)j=size时,您将计算substring(size-1, 1)。这是你错误的原因。