繁体   English   中英

字符串索引越界异常java

[英]String index out of bounds exception java

从我的类中调用函数时,我收到以下错误: java.lang.StringIndexOutOfBoundsException: String index out of range: -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) 的大小

您正在调用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<size; i++)

并注意内循环条件。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM