字符串索引越界异常java
从类中调用函数时出现以下错误: java.lang.StringIndexOutOfBoundsException:字符串索引超出范围:-1 虽然我使用了一个系统打印来查看输入,但我在substring()函数中传递了输入,而且一切似乎都是正确的。函数isContained()返回一个布尔值,该值定义作为参数传递的子字符串是否在单词列表中。我的代码是:字符串索引越界异常java,java,exception,substring,Java,Exception,Substring,从类中调用函数时出现以下错误: java.lang.StringIndexOutOfBoundsException:字符串索引超出范围:-1 虽然我使用了一个系统打印来查看输入,但我在substring()函数中传递了输入,而且一切似乎都是正确的。函数isContained()返回一个布尔值,该值定义作为参数传递的子字符串是否在单词列表中。我的代码是: for(int i=0; i<=size; i++) for(int j=i+1; j<=size; j++)
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));
for(inti=0;i您正在调用str.substring(i,j-i)
,意思是子字符串(beginIndex,endIndex)
,而不是子字符串(beginIndex,lengthOfNewString)
此方法的一个假设是endIndex
大于或等于beginIndex
,否则新索引的长度将为负值,其值将被抛出StringIndexOutOfBoundsException
也许你应该改变你的方法,做一些类似于str.substring(i,j)
另外,如果
size
是您的str的长度,则
for (int i = 0; i <= size; i++)
for(inti=0;i您正在调用str.substring(i,j-i)
,意思是子字符串(beginIndex,endIndex)
,而不是子字符串(beginIndex,lengthOfNewString)
此方法的一个假设是endIndex
大于或等于beginIndex
,否则新索引的长度将为负值,其值将被抛出StringIndexOutOfBoundsException
也许你应该改变你的方法,做一些类似于str.substring(i,j)
另外,如果size
是您的str的长度,则
for (int i = 0; i <= size; i++)
用于(int i=0;i我认为您需要更改循环条件,这是这里的问题。当您执行时,您需要再循环一次迭代。我认为您需要更改循环条件,这是这里的问题。当您执行索引自动边界异常时,您正在再循环一次迭代-如果beginIndex是否定的ive或endIndex大于此字符串对象的长度,或beginIndex大于endIndex
实际上,子字符串函数的右边缘可能低于左边缘。例如,当i=(size-1)
和j=size
时,您将计算子字符串(size-1,1)
。这是导致错误的原因。索引自动边界异常
--如果beginIndex为负数,或者endIndex大于此字符串对象的长度,或者beginIndex大于endIndex
实际上,子字符串函数的右边缘可能低于左边缘。例如,当i=(size-1)
和j=size
时,您将计算子字符串(size-1,1)
。这就是你出错的原因。我认为问题出在i=0和j=size时。你甚至试过调试它吗?我不认为问题出在那里。错误出现在i=1时。试着调试你的程序。打印输出(我可以读到你已经试过了),所以请使用调试器。如果您使用的是Eclipse IDE,它有一个内置调试器。恐怕我已经做了。我认为问题出在I=0和j=size时。您甚至尝试过调试它吗?我不认为问题出在那里。错误出现在I=1。尝试调试您的程序。输出打印输出(我可以看出您已经尝试过了),所以请使用调试器。如果您使用的是Eclipse IDE,它有一个内置调试器。恐怕我已经猜到您是对的…我认为该方法接受(索引,长度)您是对的…我认为该方法接受(索引,长度)为什么在这里投反对票?为什么在这里投反对票?
for(int i=0; i<=size; i++)
for(int i=0; i<size; i++)