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 IntelliJ 分析空指针异常、索引越界等代码的最佳方法是啥[关闭]