java字符串索引越界

Posted

技术标签:

【中文标题】java字符串索引越界【英文标题】:java string index out of bounds 【发布时间】:2012-12-01 12:14:15 【问题描述】:

我已经一遍又一遍地查看了这段代码,但看不到这是在哪里发生的它们出来了,仍然会出现错误,但是如果我摆脱了两个代码都可以正常工作,但是它们是必要的,并且它们之前确实有效。任何帮助表示赞赏。

if(lines[i].length() > 10)

    if(lines[i].charAt(4) == '-' && lines[i+1].charAt(4) == '-')
    
        lines[i] = "\nComment";
    

if(lines[i].length() > 10)

    if(lines[i].charAt(4) == '-' && lines[i+1].charAt(4) != '-' && !lines[i-1].equals("\nComment"))
    
        lines[i] = "\nPost";
    

【问题讨论】:

请包含完整的堆栈跟踪。 哪一行抛出异常? i 的值是多少?数组的长度是多少? 我们需要更多的周边代码来告诉你错误在哪里。 lines[i+1] 很可能不存在 -> ArrayIndexOutOfBoundsException 我们能看到:(1)你会使用的输入示例吗? lines[] 的转储? (2) 堆栈跟踪?由于您使用的许多代码都是对索引的直接引用,因此很难判断您是否在没有输入的情况下越界。如果 lines[i]lines[i+1] 从未正确初始化,.charAt(4) 可能会越界。你是在一个for循环中单步执行吗? lines[i+1] 可能会在最后一次迭代中超出范围。 【参考方案1】:

在使用之前检查所有变量的长度。您可以更改索引,但不进行必要的检查(null、长度和数组索引检查)。

尤其是在访问时:

lines[i+1]

lines[i-1]

【讨论】:

【参考方案2】:

我们确定 +1 和 -1 行在 10 个字符范围内吗?

【讨论】:

【参考方案3】:

您的代码没有检查

lines[i+1] 存在, lines[i-1] 存在,并且 lines[i+1] 的长度至少为五个。

i 为零或lines.length-1 时,或者当前一行/下一行之一少于五个字符时,这将中断。

【讨论】:

感谢您的帮助,现在只需检查 [i+1] 是否 > 10【参考方案4】:

您只测试了lines[i] 的长度,而您正在访问lines[i+1].charAt(4),如果它的长度小于5,这可能会给您带来这个问题。

【讨论】:

【参考方案5】:

lines[i+1].charAt(4):如果lines[i+1] 少于5 个字符怎么办?

【讨论】:

以上是关于java字符串索引越界的主要内容,如果未能解决你的问题,请参考以下文章

Java中的数组越界?

Java IntelliJ 分析空指针异常、索引越界等代码的最佳方法是啥[关闭]

如何测试索引越界错误? [复制]

ArrayList 中的索引越界异常

5.java.lang.IndexOutOfBoundsException(数组下标越界异常)

为啥python的列表切片不会产生索引越界错误? [复制]