【问题标题】:java string index out of boundsjava字符串索引越界
【发布时间】: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] 可能会在最后一次迭代中超出范围。

标签: java if-statement java-me char


【解决方案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 个字符怎么办?

        【讨论】:

          猜你喜欢
          • 2019-08-01
          • 2016-06-10
          • 2013-12-08
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-12-13
          • 1970-01-01
          • 2014-05-01
          相关资源
          最近更新 更多