CodingBat hasBad“StringIndexOutOfBoundsException”

时间:2015-01-10 15:55:36

标签: java

嘿伙计们,我希望有人可以向我解释这段代码中的错误?我只是在理解为什么会抛出异常时遇到一点麻烦。

screenshot from codingbat

3 个答案:

答案 0 :(得分:4)

第一个条件检查字符串的最小长度应为3.所以“bad”和“xba”通过第一个条件。

让我们首先使用bad

第二个条件有两个OR子句,字符串“bad”满足第3行的两个OR子句中的第一个。因此答案是TRUE

现在xba .. 两个OR子句中的第一个失败,因此它检查第二个。str.substrin(1, 4)子句。此处StringIndexOutOfBoundsException抛出xba,因为字符串String testString = "bad"; String givenString = "xxbad"; boolean zeroIndexMatch = givenString.regionMatches(true, 0, testString, 0, 3); boolean firstIndexMatch = givenString.regionMatches(true, 1, testString, 0, 3); if (zeroIndexMatch || firstIndexMatch) { System.out.println(true); } else { System.out.println(false); } 中的字符数仅为3。

我会简单地执行STRING.regionMatches(),如下所示

{{1}}

答案 1 :(得分:2)

测试字符串"xba"的长度为 3 ,索引从 0 2 。 您substring的第二个方法调用是str.substring(1,4)。因此,它尝试读取指数 1 直到 3 the endIndex 4 is exclusive)。因此,您尝试从索引 3 中读取内容,但由于字符串长度不足以获得此类索引,因此您将获得上述异常。

答案 2 :(得分:2)

当您使用str.substring(1, 4)方法时,它会导致第7次测试出现问题,因为它只使用3个字符长的字符串。通过尝试访问第四个字符,你将从字符串的边界出来,从而得到StringIndexOutOfBoundsException。