我在下面的字符串中写了一个以下代码来查找关键字requirement failed: memory 812 MB exceeds allowed threshold of 536870912 B (code 10543)
,其中co_e
代表任何其他字符。
如果我将字符串更改为_
或"aaacodebbb"
,则效果很好
但如果我将其更改为"codexxcode"
,则会抛出"xxcozeyycop"
StringIndexOutOfBoundsException
答案 0 :(得分:1)
此行中出现了您的越界错误:
if (str.charAt(i) == 'c' && str.charAt(i + 1) == 'o' && str.charAt(i + 3) == 'e')
错误发生在str.charAt(8)
str = "xxcozeyycop"
,因为str.length()
为11,str.charAt(11)
明显超出范围(所有str.charAt(str.length())
都是如此)
这是一种可能的解决方案。请注意,如果str.length() < 4
,for循环无法运行,因为i + 3
将始终超出范围。此外,当所有字符串的i == str.length() - 4
超过四个字符时,i+3
将等于字符串的最后一个索引str.length() - 1
。
for (int i = 0; i < str.length() - 3; i++) {
char c1 = str.charAt(i);
char c2 = str.charAt(i + 1);
char c4 = str.charAt(i + 3);
if (c1 == 'c' && c2 == 'o' && c4 == 'e')
count++;
}
答案 1 :(得分:0)
在循环中,您正在检查访问i + 3。因此,当i
位于最后一个位置时,您必须停止。
将if(str.length()>= 3)
替换为if(str.length()>= 3 && str.length() - i >3)
OR
您可以将以下内容作为for循环中的第一个条件:
if(str.length() - i <=3){
break;
}