Как найти слово в Java String с помощью метода indexOf()

JavaJavaBeginner
Практиковаться сейчас

💡 Этот учебник переведен с английского с помощью ИИ. Чтобы просмотреть оригинал, вы можете перейти на английский оригинал

Введение

В этом учебном пособии по программированию на Java мы рассмотрим метод indexOf(), универсальный инструмент для поиска слов или символов внутри Java String. Метод indexOf() является важным для работы с текстом в Java-приложениях, позволяя вам искать конкретное содержимое внутри больших строк. К концу этого руководства вы поймете, как эффективно использовать этот метод и применять его в различных сценариях для улучшения ваших навыков работы со строками в Java.

Создание вашей первой программы поиска в строке

На этом этапе мы создадим простую Java-программу, которая демонстрирует использование метода indexOf() для поиска определенного слова внутри строки.

Понимание метода indexOf()

Метод indexOf() - это встроенная функция в классе String Java, которая помогает вам определить местоположение подстроки внутри большей строки. Вот базовый синтаксис:

int indexOf(String str)

Этот метод возвращает индекс (позицию) первого вхождения указанной подстроки. Если подстрока не найдена, метод возвращает -1.

Создание Java-файла

Давайте создадим нашу первую программу, чтобы увидеть метод indexOf() в действии:

  1. Откройте WebIDE в вашей среде LabEx
  2. Создайте новый файл, нажав на значок "New File" или используя меню File
  3. Назовите файл StringSearchDemo.java
  4. Введите следующий код в файл:
public class StringSearchDemo {
    public static void main(String[] args) {
        // Create a sample sentence to search through
        String sentence = "Java programming is both fun and challenging";

        // Find the position of a word using indexOf()
        int position = sentence.indexOf("fun");

        // Display the results
        System.out.println("Original sentence: " + sentence);
        System.out.println("Searching for the word 'fun'");

        if (position != -1) {
            System.out.println("The word 'fun' was found at position: " + position);
        } else {
            System.out.println("The word 'fun' was not found in the sentence");
        }
    }
}

Компиляция и запуск программы

Теперь давайте скомпилируем и запустим нашу программу:

  1. Откройте терминал в WebIDE (если он еще не открыт)
  2. Скомпилируйте Java-файл, выполнив:
    javac StringSearchDemo.java
  3. Запустите скомпилированную программу:
    java StringSearchDemo

Вы должны увидеть вывод, похожий на:

Original sentence: Java programming is both fun and challenging
Searching for the word 'fun'
The word 'fun' was found at position: 25

Анализ результата

Вывод показывает, что наша программа успешно нашла слово "fun" на позиции 25 в строке. В Java индексы строк начинаются с 0, поэтому 26-й символ находится по индексу 25.

Вы можете проверить это, посчитав символы: "Java programming is both " имеет ровно 25 символов, а затем начинается "fun".

Попробуйте поискать другое слово

Давайте изменим нашу программу, чтобы искать другое слово. Измените поисковый запрос с "fun" на "programming" в вашем коде:

int position = sentence.indexOf("programming");
System.out.println("Searching for the word 'programming'");

Скомпилируйте и запустите программу снова:

javac StringSearchDemo.java
java StringSearchDemo

Теперь вы должны увидеть:

Original sentence: Java programming is both fun and challenging
Searching for the word 'programming'
The word 'programming' was found at position: 5

Слово "programming" начинается с позиции 5, что верно, потому что "Java " имеет 5 символов.

Поиск нескольких вхождений слова

Теперь, когда мы понимаем основы использования indexOf() для поиска одного вхождения слова, давайте улучшим наши навыки, узнав, как находить все вхождения слова в строке.

Понимание второй сигнатуры метода indexOf()

Метод indexOf() имеет еще одну полезную форму:

int indexOf(String str, int fromIndex)

Эта версия позволяет указать начальную позицию для поиска. Используя эту форму, мы можем найти все вхождения слова, начиная каждый новый поиск с того места, где мы остановились.

Создание программы множественного поиска

Давайте создадим новую Java-программу, которая находит все вхождения определенного слова:

  1. Создайте новый файл с именем MultipleFinder.java
  2. Введите следующий код:
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);
    }
}

Компиляция и запуск программы множественного поиска

Теперь давайте скомпилируем и запустим нашу новую программу:

  1. В терминале скомпилируйте Java-файл:
    javac MultipleFinder.java
  2. Запустите скомпилированную программу:
    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

Как работает программа

Давайте разберем, как эта программа находит все вхождения:

  1. Мы устанавливаем начальную позицию поиска в 0 (начало строки)
  2. Мы входим в цикл while, который продолжается до тех пор, пока indexOf() не вернет -1 (больше совпадений нет)
  3. Для каждого совпадения мы:
    • Выводим позицию, где мы нашли слово
    • Обновляем позицию поиска, чтобы начать после текущего совпадения, добавив длину искомого слова
  4. Цикл продолжается до тех пор, пока не будут найдены все совпадения
  5. Наконец, мы выводим общее количество найденных вхождений

Обработка чувствительности к регистру

Метод 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

Вывод теперь будет включать результаты поиска с учетом и без учета регистра.

Создание простого текстового анализатора

На этом этапе мы создадим практическое приложение, которое использует метод indexOf(). Мы создадим простой текстовый анализатор, который может подсчитывать определенные слова и определять их позиции в большем тексте.

Создание текстового анализатора

  1. Создайте новый файл с именем TextAnalyzer.java
  2. Введите следующий код:
import java.util.Scanner;

public class TextAnalyzer {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        // Sample text to analyze
        String sampleText = "Java is one of the most popular programming languages. Java was developed " +
                          "by Sun Microsystems. Today, Java is used to develop mobile apps, web applications, " +
                          "desktop applications, games and much more. Java is known for its simplicity, " +
                          "object-oriented features, and platform independence.";

        System.out.println("Text Analyzer Program");
        System.out.println("=====================");
        System.out.println("\nText to analyze:");
        System.out.println(sampleText);

        // Prompt user for a word to search
        System.out.print("\nEnter a word to search for: ");
        String searchWord = scanner.nextLine();

        // Call methods to analyze the text
        int occurrences = countOccurrences(sampleText, searchWord);

        // Display results
        System.out.println("\nAnalysis Results:");
        System.out.println("----------------");
        System.out.println("Word searched for: \"" + searchWord + "\"");
        System.out.println("Number of occurrences: " + occurrences);

        // Show the positions if the word was found
        if (occurrences > 0) {
            System.out.println("\nPositions where \"" + searchWord + "\" appears:");
            findPositions(sampleText, searchWord);
        }

        // Calculate percentage of the text the word represents
        if (occurrences > 0) {
            // Calculate what percentage of the text this word represents
            double percentage = (double)(searchWord.length() * occurrences) / sampleText.length() * 100;
            System.out.printf("\nThe word \"%s\" makes up %.2f%% of the total text.\n",
                              searchWord, percentage);
        }

        scanner.close();
    }

    // Method to count occurrences of a word in the text
    public static int countOccurrences(String text, String word) {
        int count = 0;
        int position = 0;

        while (position != -1) {
            position = text.indexOf(word, position);

            if (position != -1) {
                count++;
                position += word.length();
            }
        }

        return count;
    }

    // Method to find and print all positions of a word
    public static void findPositions(String text, String word) {
        int position = 0;
        int occurrence = 0;

        while (position != -1) {
            position = text.indexOf(word, position);

            if (position != -1) {
                occurrence++;
                System.out.println("  Occurrence " + occurrence + ": Position " + position +
                                  " (ends at position " + (position + word.length() - 1) + ")");

                // Show the context around the word
                int contextStart = Math.max(0, position - 10);
                int contextEnd = Math.min(text.length(), position + word.length() + 10);
                String context = text.substring(contextStart, contextEnd);

                // Highlight the word in the context
                System.out.print("  Context: ");
                if (contextStart > 0) {
                    System.out.print("...");
                }

                System.out.print(context);

                if (contextEnd < text.length()) {
                    System.out.print("...");
                }
                System.out.println("\n");

                position += word.length();
            }
        }
    }
}

Компиляция и запуск текстового анализатора

Теперь давайте скомпилируем и запустим наш текстовый анализатор:

  1. В терминале скомпилируйте Java-файл:

    javac TextAnalyzer.java
  2. Запустите скомпилированную программу:

    java TextAnalyzer
  3. Когда появится запрос, введите слово для поиска, например Java

Вы должны увидеть вывод, похожий на:

Text Analyzer Program
=====================

Text to analyze:
Java is one of the most popular programming languages. Java was developed by Sun Microsystems. Today, Java is used to develop mobile apps, web applications, desktop applications, games and much more. Java is known for its simplicity, object-oriented features, and platform independence.

Enter a word to search for: Java

Analysis Results:
----------------
Word searched for: "Java"
Number of occurrences: 4

Positions where "Java" appears:
  Occurrence 1: Position 0 (ends at position 3)
  Context: ...Java is one o...

  Occurrence 2: Position 48 (ends at position 51)
  Context: ...guages. Java was dev...

  Occurrence 3: Position 93 (ends at position 96)
  Context: ...Today, Java is used...

  Occurrence 4: Position 197 (ends at position 200)
  Context: ...more. Java is know...

The word "Java" makes up 1.67% of the total text.

Понимание текстового анализатора

Наш текстовый анализатор делает следующее:

  1. Отображает образец текста для анализа
  2. Просит пользователя ввести слово для поиска
  3. Подсчитывает, сколько раз слово встречается в тексте
  4. Отображает позиции, в которых встречается слово
  5. Для каждого вхождения показывает окружающий контекст
  6. Вычисляет, какой процент от общего текста составляет искомое слово

Это приложение демонстрирует практическое использование метода indexOf() для анализа текста. Программу можно расширить, включив в нее больше функций, таких как:

  • Поиск без учета регистра
  • Поиск только целых слов (а не частей слов)
  • Анализ нескольких слов одновременно
  • Создание статистики о тексте

Попробуйте снова запустить программу с разными поисковыми словами, чтобы увидеть, как она работает с различными входными данными.

Резюме

В этом руководстве вы узнали, как использовать метод indexOf() в Java для поиска слов в строках. Вы освоили:

  1. Использование indexOf() для поиска первого вхождения слова в строке
  2. Поиск всех вхождений слова с использованием цикла и второй формы indexOf()
  3. Выполнение поиска без учета регистра путем преобразования строк в нижний регистр
  4. Создание практического приложения текстового анализатора, демонстрирующего реальное использование метода indexOf()

Эти навыки работы со строками являются фундаментальными в программировании на Java и будут полезны в различных задачах программирования, включая обработку данных, проверку пользовательского ввода и анализ текста. Понимая, как находить и работать с определенными частями строк, вы можете создавать более сложные и удобные для пользователя приложения.

Продолжая свой путь в Java, вы можете расширить эти концепции, изучив другие методы String, такие как substring(), replace() и регулярные выражения, для более продвинутой обработки текста.