Поиск нескольких вхождений слова
Теперь, когда мы понимаем основы использования indexOf()
для поиска одного вхождения слова, давайте улучшим наши навыки, узнав, как находить все вхождения слова в строке.
Понимание второй сигнатуры метода indexOf()
Метод indexOf()
имеет еще одну полезную форму:
int indexOf(String str, int fromIndex)
Эта версия позволяет указать начальную позицию для поиска. Используя эту форму, мы можем найти все вхождения слова, начиная каждый новый поиск с того места, где мы остановились.
Создание программы множественного поиска
Давайте создадим новую Java-программу, которая находит все вхождения определенного слова:
- Создайте новый файл с именем
MultipleFinder.java
- Введите следующий код:
public class MultipleFinder {
public static void main(String[] args) {
// Create a sample text with multiple occurrences of a word
String paragraph = "Java is a popular programming language. Java runs on various platforms. " +
"Java is used for developing web applications, mobile apps, and more. " +
"Learning Java is essential for many software development roles.";
System.out.println("Original text:");
System.out.println(paragraph);
System.out.println("\nSearching for all occurrences of 'Java':");
// Find all occurrences of "Java"
String searchWord = "Java";
int position = 0;
int count = 0;
// Loop until no more occurrences are found
while (position != -1) {
position = paragraph.indexOf(searchWord, position);
if (position != -1) {
count++;
System.out.println("Occurrence " + count + " found at position: " + position);
// Move past this occurrence to find the next one
position += searchWord.length();
}
}
System.out.println("\nTotal occurrences found: " + count);
}
}
Компиляция и запуск программы множественного поиска
Теперь давайте скомпилируем и запустим нашу новую программу:
- В терминале скомпилируйте Java-файл:
javac MultipleFinder.java
- Запустите скомпилированную программу:
java MultipleFinder
Вы должны увидеть вывод, похожий на:
Original text:
Java is a popular programming language. Java runs on various platforms. Java is used for developing web applications, mobile apps, and more. Learning Java is essential for many software development roles.
Searching for all occurrences of 'Java':
Occurrence 1 found at position: 0
Occurrence 2 found at position: 42
Occurrence 3 found at position: 72
Occurrence 4 found at position: 149
Total occurrences found: 4
Как работает программа
Давайте разберем, как эта программа находит все вхождения:
- Мы устанавливаем начальную позицию поиска в 0 (начало строки)
- Мы входим в цикл while, который продолжается до тех пор, пока
indexOf()
не вернет -1 (больше совпадений нет)
- Для каждого совпадения мы:
- Выводим позицию, где мы нашли слово
- Обновляем позицию поиска, чтобы начать после текущего совпадения, добавив длину искомого слова
- Цикл продолжается до тех пор, пока не будут найдены все совпадения
- Наконец, мы выводим общее количество найденных вхождений
Обработка чувствительности к регистру
Метод indexOf()
по умолчанию чувствителен к регистру. Давайте изменим нашу программу, чтобы выполнить поиск без учета регистра, преобразовав как текст, так и поисковый запрос в нижний регистр:
Добавьте эти строки в MultipleFinder.java
сразу после запуска метода main:
// Case-insensitive search demonstration
System.out.println("\n--- Case-insensitive search ---");
String lowercaseParagraph = paragraph.toLowerCase();
String lowercaseSearchWord = searchWord.toLowerCase();
position = 0;
count = 0;
while (position != -1) {
position = lowercaseParagraph.indexOf(lowercaseSearchWord, position);
if (position != -1) {
count++;
System.out.println("Occurrence " + count + " found at position: " + position);
position += lowercaseSearchWord.length();
}
}
System.out.println("\nTotal occurrences found (case-insensitive): " + count);
Скомпилируйте и запустите обновленную программу:
javac MultipleFinder.java
java MultipleFinder
Вывод теперь будет включать результаты поиска с учетом и без учета регистра.