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