字符串索引超出范围exceptionjava

从我的类中调用函数时出现以下错误: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,ji))) System.out.println(str.substring(i,ji)); 

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

你正在调用str.substring(i, ji) ,这意味着substring(beginIndex, endIndex) ,而不是substring(beginIndex, lengthOfNewString)

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

也许你应该改变你的方法做str.substring(i, j)


如果size是你的str长度那么

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

应该是

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

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

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

 for(int i=0; i 

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

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

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