【问题标题】:String index out of bound exception in if statementif语句中的字符串索引超出范围异常
【发布时间】:2015-08-23 19:08:20
【问题描述】:
if(line.get(count).substring(line.get(count).indexOf(p1)).equals(p1.substring(0, p1.indexOf(" ")))) {
    count++;
    if(line.get(count).contains(p1.substring(p1.indexOf(" ") + 1, p1.length())))
        System.out.println((count-1) + "     " + (line.get(count-1).indexOf(p1)) + "     " + p1);
}

Line 是大小为 65008 的数组列表,我正在尝试测试一个名称出现在文件的两行上,名字出现在一行上,姓氏出现在第二行上。但是,索引越界异常发生在第一个 if 语句中。当我试图比较子字符串时,我无法意识到我是否在这里做错了导致这个问题。有人可以提出解决这个问题的方法吗?这些 if 语句很长,但我稍后会尝试调整它们。

【问题讨论】:

  • 您确定line.get(count) 包含p1 并且p1 包含" "
  • 提供您的堆栈跟踪。
  • 旁注:在您花费数小时调试复杂代码之后不要对其进行调整。确保从一开始就容易阅读和理解。因为那时……您可能不需要数小时的调试和求助于 SO 来获得帮助。此外:请后退一秒;并重新阅读您的问题。你真的认为你在表达对这个社区的尊重吗:“我知道,我的代码很难阅读;我稍后会修复它;与此同时,亲爱的互联网,请帮助我找到那个丑陋的代码中的错误意大利面条代码在这里”
  • 是的,这实际上是我的最后一次测试,我在使用类似的 line.get(count) 之前做了类似的测试,因此 p1 被初始化为一个名字,名字和姓氏之间有空格。

标签: java arraylist substring indexoutofboundsexception


【解决方案1】:

尝试使用此代码:

        if (line.get(count).substring(line.get(count).indexOf(p1))
            .equals(p1.substring(0, p1.indexOf(" ")))) {
        if (line.get(count).contains(
                p1.substring(p1.indexOf(" ") + 1, p1.length()))) {
            System.out.println((count - 1) + "     "
                    + (line.get(count - 1).indexOf(p1)) + "     " + p1);
        }
        count++;
    }

主要区别在于它在两个 if 条件都运行后增加 count 并且在第二个 if 中添加大括号以提高可读性。我不确定这是否能解决问题,如果不能,您可能需要提供更多信息。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-07-23
    • 2019-08-31
    • 1970-01-01
    • 1970-01-01
    • 2021-08-12
    • 2015-05-26
    相关资源
    最近更新 更多