Как проверить, присутствует ли определенный символ в строке

Я написал код ниже, чтобы найти ключевое слово co_e в строке ниже, где _ представляет любой другой символ.

Это хорошо работает, если я изменяю строку на "aaacodebbb" или же "codexxcode"но если я изменю это на "xxcozeyycop" это бросает StringIndexOutOfBoundsException

public int countCode(String str) {
    int count = 0;
    String result = "";
    boolean yes = true;
    for (int i = 0; i < str.length(); i++) {
        // yes = str.charAt(i+3);
        if (str.length() >= 3) {
            if (str.charAt(i) == 'c' && str.charAt(i + 1) == 'o' && str.charAt(i + 3) == 'e')
                count++;
        }
    }
    return (count);
}

2 ответа

Решение

В цикле вы проверяете доступ к i+3. Итак, вы должны остановиться, когда i находится на 4-й последней позиции.

замещать if(str.length()>= 3) с if(str.length()>= 3 && str.length() - i >3)

ИЛИ ЖЕ

Вы можете поместить следующее в качестве первого условия вашего цикла for:

if(str.length() - i <=3){
    break;
}

В этой строке произошла ваша недопустимая ошибка:

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++;
}
Другие вопросы по тегам