Как проверить, содержит ли строка в Java определенную подстроку

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

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

Введение

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

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


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL java(("Java")) -.-> java/StringManipulationGroup(["String Manipulation"]) java(("Java")) -.-> java/SystemandDataProcessingGroup(["System and Data Processing"]) java/StringManipulationGroup -.-> java/strings("Strings") java/SystemandDataProcessingGroup -.-> java/string_methods("String Methods") subgraph Lab Skills java/strings -.-> lab-559979{{"Как проверить, содержит ли строка в Java определенную подстроку"}} java/string_methods -.-> lab-559979{{"Как проверить, содержит ли строка в Java определенную подстроку"}} end

Использование метода contains() для поиска подстроки

На этом этапе мы научимся проверять, содержит ли строка в Java определенную подстроку с использованием метода contains(). Это распространенная задача в программировании, например, при поиске ключевого слова в предложении или проверке, содержит ли имя файла определенное расширение.

Метод contains() является частью класса String в Java. Он возвращает true, если строка содержит указанную последовательность символов, и false в противном случае.

Создадим новый Java-файл, чтобы потренироваться в использовании метода contains().

  1. Откройте проводник файлов слева в WebIDE.

  2. Убедитесь, что вы находитесь в каталоге ~/project.

  3. Щелкните правой кнопкой мыши в пустом пространстве и выберите "Новый файл".

  4. Назовите новый файл StringContains.java.

  5. Откройте файл StringContains.java в редакторе.

  6. Скопируйте и вставьте следующий код в редактор:

    public class StringContains {
        public static void main(String[] args) {
            String sentence = "Java programming is fun and powerful.";
            String keyword = "programming";
    
            // Check if the sentence contains the keyword
            boolean containsKeyword = sentence.contains(keyword);
    
            System.out.println("Sentence: \"" + sentence + "\"");
            System.out.println("Keyword: \"" + keyword + "\"");
            System.out.println("Does the sentence contain the keyword? " + containsKeyword);
    
            String anotherKeyword = "Python";
            boolean containsAnotherKeyword = sentence.contains(anotherKeyword);
    
            System.out.println("\nAnother keyword: \"" + anotherKeyword + "\"");
            System.out.println("Does the sentence contain the another keyword? " + containsAnotherKeyword);
        }
    }

    В этом коде:

    • Мы объявляем переменную String с именем sentence и переменную String с именем keyword.
    • Мы используем sentence.contains(keyword) для проверки, содержит ли sentence последовательность символов из keyword. Результат сохраняется в переменной типа boolean с именем containsKeyword.
    • Мы выводим исходное предложение, ключевое слово и результат проверки с использованием метода contains().
    • Мы повторяем процесс с другим ключевым словом, "Python", чтобы увидеть результат, когда подстрока не найдена.
  7. Сохраните файл (Ctrl+S или Cmd+S).

  8. Откройте терминал внизу WebIDE.

  9. Убедитесь, что вы находитесь в каталоге ~/project с помощью команды:

    cd ~/project
  10. Скомпилируйте Java-программу с использованием команды javac:

    javac StringContains.java

    Если нет ошибок, вы не увидите никакого вывода. В каталоге ~/project будет создан файл StringContains.class.

  11. Запустите скомпилированную Java-программу с использованием команды java:

    java StringContains

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

    Sentence: "Java programming is fun and powerful."
    Keyword: "programming"
    Does the sentence contain the keyword? true
    
    Another keyword: "Python"
    Does the sentence contain the another keyword? false

Этот вывод показывает, что метод contains() правильно определил, что предложение содержит "programming", но не содержит "Python".

Исследование метода indexOf() для определения позиции подстроки

На предыдущем этапе мы научились проверять, содержит ли строка подстроку с использованием метода contains(). Теперь давайте рассмотрим другой полезный метод, indexOf(), который не только показывает, существует ли подстрока, но и указывает ее начальную позицию в строке.

Метод indexOf() в классе String в Java возвращает индекс первого вхождения указанной подстроки в строке. Индекс представляет собой позицию первого символа подстроки. Помните, что в программировании индексация обычно начинается с 0. Если подстрока не найдена, метод indexOf() возвращает -1.

Давайте модифицируем наш предыдущий Java-файл StringContains.java, чтобы использовать метод indexOf().

  1. Откройте файл StringContains.java в редакторе WebIDE.

  2. Замените все содержимое файла следующим кодом:

    public class StringContains {
        public static void main(String[] args) {
            String sentence = "Java programming is fun and powerful.";
            String keyword = "programming";
    
            // Find the index of the keyword
            int index = sentence.indexOf(keyword);
    
            System.out.println("Sentence: \"" + sentence + "\"");
            System.out.println("Keyword: \"" + keyword + "\"");
    
            if (index != -1) {
                System.out.println("The keyword \"" + keyword + "\" was found at index: " + index);
            } else {
                System.out.println("The keyword \"" + keyword + "\" was not found.");
            }
    
            String anotherKeyword = "Python";
            int anotherIndex = sentence.indexOf(anotherKeyword);
    
            System.out.println("\nAnother keyword: \"" + anotherKeyword + "\"");
    
            if (anotherIndex != -1) {
                System.out.println("The keyword \"" + anotherKeyword + "\" was found at index: " + anotherIndex);
            } else {
                System.out.println("The keyword \"" + anotherKeyword + "\" was not found.");
            }
        }
    }

    В этом обновленном коде:

    • Мы используем sentence.indexOf(keyword) для нахождения начального индекса keyword в sentence. Результат сохраняется в переменной типа int с именем index.
    • Мы используем оператор if для проверки, равно ли возвращаемое значение index -1. Если оно не равно -1, это означает, что ключевое слово было найдено, и мы выводим его индекс. В противном случае мы выводим сообщение о том, что ключевое слово не найдено.
    • Мы повторяем процесс для "Python", чтобы продемонстрировать случай, когда подстрока отсутствует.
  3. Сохраните файл (Ctrl+S или Cmd+S).

  4. Откройте терминал внизу WebIDE.

  5. Убедитесь, что вы находитесь в каталоге ~/project.

  6. Скомпилируйте модифицированную Java-программу:

    javac StringContains.java
  7. Запустите скомпилированную Java-программу:

    java StringContains

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

    Sentence: "Java programming is fun and powerful."
    Keyword: "programming"
    The keyword "programming" was found at index: 5
    
    Another keyword: "Python"
    The keyword "Python" was not found.

Вывод показывает, что "programming" начинается с индекса 5 в предложении (помните, что 'J' находится на индексе 0, 'a' - на индексе 1 и так далее, включая пробел). Также корректно указывается, что "Python" не найдено.

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

Проверка наличия подстроки без учета регистра

На предыдущих этапах мы использовали методы contains() и indexOf() для поиска подстрок. Однако эти методы чувствительны к регистру. Это означает, что "Java" считается отличной от "java" или "JAVA". Во многих ситуациях вам может понадобиться выполнить поиск без учета регистра.

В классе String в Java нет встроенных методов, таких как containsIgnoreCase() или indexOfIgnoreCase(). Однако мы можем добиться регистронезависимости, преобразовав как исходную строку, так и подстроку в один и тот же регистр (нижний или верхний) перед выполнением поиска. Наиболее распространенный подход - преобразовать обе строки в нижний регистр с помощью метода toLowerCase().

Давайте снова модифицируем файл StringContains.java, чтобы выполнить поиск без учета регистра.

  1. Откройте файл StringContains.java в редакторе WebIDE.

  2. Замените все содержимое файла следующим кодом:

    public class StringContains {
        public static void main(String[] args) {
            String sentence = "Java programming is fun and powerful.";
            String keyword = "JAVA"; // Using uppercase for demonstration
    
            // Convert both strings to lowercase for case-insensitive comparison
            String lowerSentence = sentence.toLowerCase();
            String lowerKeyword = keyword.toLowerCase();
    
            // Use contains() on the lowercase strings
            boolean containsKeyword = lowerSentence.contains(lowerKeyword);
    
            System.out.println("Original Sentence: \"" + sentence + "\"");
            System.out.println("Original Keyword: \"" + keyword + "\"");
            System.out.println("Does the sentence contain the keyword (case-insensitive)? " + containsKeyword);
    
            // You can also use indexOf() in a case-insensitive way
            int index = lowerSentence.indexOf(lowerKeyword);
    
            if (index != -1) {
                System.out.println("The keyword \"" + keyword + "\" was found at index (case-insensitive): " + index);
            } else {
                System.out.println("The keyword \"" + keyword + "\" was not found (case-insensitive).");
            }
        }
    }

    В этом коде:

    • Мы определяем keyword как "JAVA" (в верхнем регистре).
    • Мы создаем новые строки lowerSentence и lowerKeyword, преобразовав исходные строки в нижний регистр с помощью метода toLowerCase().
    • Затем мы используем метод contains() для строк в нижнем регистре, чтобы выполнить проверку без учета регистра.
    • Мы также показываем, как использовать метод indexOf() без учета регистра, применяя его к строкам в нижнем регистре.
  3. Сохраните файл (Ctrl+S или Cmd+S).

  4. Откройте терминал внизу WebIDE.

  5. Убедитесь, что вы находитесь в каталоге ~/project.

  6. Скомпилируйте модифицированную Java-программу:

    javac StringContains.java
  7. Запустите скомпилированную Java-программу:

    java StringContains

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

    Original Sentence: "Java programming is fun and powerful."
    Original Keyword: "JAVA"
    Does the sentence contain the keyword (case-insensitive)? true
    The keyword "JAVA" was found at index (case-insensitive): 0

Этот вывод показывает, что даже несмотря на то, что исходное ключевое слово было "JAVA" (в верхнем регистре), регистронезависимый поиск корректно нашел его в предложении и сообщил его индекс (который равен 0 для "Java" в нижнем регистре).

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

Резюме

В этом практическом занятии (лабораторной работе) мы научились проверять, содержит ли строка в Java определенную подстроку. Мы начали с использования метода contains(), который позволяет легко проверить наличие подстроки с помощью булевого значения. Этот метод прост и полезен для базовых проверок на существование подстроки.

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