Как проверить, присутствует ли определенный символ в строке
Я написал код ниже, чтобы найти ключевое слово 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++;
}