如何检查字符串中是否存在某个字符

时间:2018-04-14 05:43:40

标签: java string stringindexoutofbounds

我在下面的字符串中写了一个以下代码来查找关键字requirement failed: memory 812 MB exceeds allowed threshold of 536870912 B (code 10543) ,其中co_e代表任何其他字符。

如果我将字符串更改为_"aaacodebbb",则效果很好 但如果我将其更改为"codexxcode",则会抛出"xxcozeyycop"

StringIndexOutOfBoundsException

2 个答案:

答案 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;
}