【问题标题】:String index out of bounds exception java字符串索引越界异常java
【发布时间】:2013-12-08 08:29:07
【问题描述】:

在我的类中调用函数时出现以下错误: 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)的大小

【问题讨论】:

  • 我认为问题出在 i=0 和 j = size 时。
  • 你试过调试它吗
  • 我认为问题不存在。错误出现在 i=1..
  • 尝试调试您的程序。把打印输出(我可以读到你已经尝试过),所以使用调试器。如果您使用的是 Eclipse IDE,它有一个内置的调试器。
  • 恐怕我已经做到了

标签: java exception substring


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

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

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

    还要注意内部循环条件。

    【讨论】:

    • 为什么要在这里投反对票?
    【解决方案3】:

    您正在调用str.substring(i, j-i),这意味着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++)
    

    【讨论】:

    • 你是对的......我认为该方法正在接受(索引,长度)
    猜你喜欢
    • 2019-08-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-16
    • 2017-03-22
    • 1970-01-01
    • 1970-01-01
    • 2012-10-03
    • 1970-01-01
    相关资源
    最近更新 更多