Чтобы найти все вхождения определенного значения в строку или массив Java, вы можете использовать различные методы. Вот несколько подходов:
- Использование цикла: вы можете перебирать строку или массив и сравнивать каждый элемент с целевым значением. Если совпадение найдено, вы можете сохранить индекс или выполнить любую желаемую операцию. Вот пример использования цикла:
String str = "Hello, hello, hello!";
String target = "hello";
int index = -1;
List<Integer> occurrences = new ArrayList<>();
while ((index = str.indexOf(target, index + 1)) != -1) {
occurrences.add(index);
}
System.out.println("Occurrences: " + occurrences);
- Использование Apache Commons Lang: Библиотека Apache Commons Lang предоставляет служебный класс под названием
StringUtils, который предлагает метод под названиемindexOfAny(String str, String[] searchStrs). Он возвращает индекс первого вхождения любой из строк поиска. Вы можете использовать этот метод, чтобы найти все вхождения. Вот пример:
import org.apache.commons.lang3.StringUtils;
String str = "Hello, hello, hello!";
String target = "hello";
List<Integer> occurrences = new ArrayList<>();
int index = -1;
while ((index = StringUtils.indexOfAny(str.toLowerCase(), target.toLowerCase(), index + 1)) != -1) {
occurrences.add(index);
}
System.out.println("Occurrences: " + occurrences);
- Использование регулярных выражений. Регулярные выражения также можно использовать для поиска всех вхождений шаблона в строку. Пакет
java.util.regexпредоставляет классы для сопоставления с образцом. Вот пример:
import java.util.regex.Matcher;
import java.util.regex.Pattern;
String str = "Hello, hello, hello!";
String regex = "hello";
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(str.toLowerCase());
List<Integer> occurrences = new ArrayList<>();
while (matcher.find()) {
occurrences.add(matcher.start());
}
System.out.println("Occurrences: " + occurrences);