Как проверить, содержит ли строка подстроку
Короткий ответ
Метод contains() возвращает true или false:
void main() {
String text = "Java is fun";
IO.println(text.contains("is"));
IO.println(text.contains("Python"));
}Результат:
true
falseГде находится подстрока
indexOf() возвращает позицию первого вхождения или -1:
void main() {
IO.println("Java is fun".indexOf("is"));
IO.println("Java is fun".indexOf("Python"));
}Результат:
5
-1Без учёта регистра
Приведите обе строки к одному регистру:
void main() {
String text = "Hello World";
String query = "WORLD";
IO.println(text.toLowerCase(Locale.ROOT).contains(query.toLowerCase(Locale.ROOT)));
}Результат:
trueОдно из нескольких слов
Проверьте список слов через anyMatch():
void main() {
var banned = List.of("spam", "scam");
String message = "This is not a scam";
IO.println(banned.stream().anyMatch(message::contains));
}Результат:
trueЧастая ошибка
Путать contains() и matches(). matches() проверяет, что регулярному выражению соответствует вся строка целиком, а не её часть:
void main() {
IO.println("order 42".matches("\\d+"));
IO.println("order 42".matches(".*\\d+.*"));
}Результат:
false
trueФункции из этого ответа
- String.contains() — Проверяет, есть ли в строке подстрока.
- String.indexOf() — Находит позицию первого вхождения символа или подстроки.
- String.matches() — Проверяет, соответствует ли вся строка регулярному выражению.
- String.toLowerCase() — Возвращает копию строки, где все буквы строчные.