Java найти часть строки

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

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

Есть несколько способов сделать это в Java, и большинство из них — то, что вы ожидаете увидеть и в других языках программирования. Однако один из подходов, уникальных для Java, — это использование класса Pattern , о котором мы расскажем позже в этой статье.

В качестве альтернативы вы можете использовать Apache Commons и вспомогательный класс StringUtils , который предлагает множество производных методов из основных методов для этой цели.

Основные способы Java

String.contains()

Первый и главный способ проверить наличие подстроки — это метод .contains() . Это обеспечивается самим классом String и очень эффективно.

Метод принимает CharSequence и возвращает true , если последовательность присутствует в строке, для которой мы вызываем метод:

String string = "Java"; String substring = "va"; System.out.println(string.contains(substring)); 

Примечание: метод .contains() чувствителен к регистру. Если бы мы попытались искать «Va» в нашем string , результат будет false .

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

System.out.println(string.toLowerCase().contains(substring.toLowerCase())); // OR System.out.println(string.toUpperCase().contains(substring.toUpperCase())); 

String.indexOf()

Метод .indexOf() возвращает индекс первого вхождения подстроки в строке и предлагает несколько конструкторов на выбор:

indexOf(int ch) indexOf(int ch, int fromIndex) indexOf(String str) indexOf(String str, int fromIndex) 

Мы можем либо искать один символ со смещением или без него, либо искать строку со смещением или без него.

Метод вернет индекс первого вхождения, если присутствует, и -1 если нет:

String string = "Lorem ipsum dolor sit amet."; // You can also use unicode for characters System.out.println(string.indexOf('i')); System.out.println(string.indexOf('i', 8)); System.out.println(string.indexOf("dolor")); System.out.println(string.indexOf("Lorem", 10)); 
  • Первое вхождение i в слове ipsum , имеет индекс 6 от начала последовательности символов.
  • Первое вхождение i со смещением 8 находится в слове sit , имеет индекс 19 от начала.
  • Первое вхождение String dolor — имеет индекс 12 с начала.
  • И, наконец, слова Lorem нет при смещении 10 .

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

String.lastIndexOf()

В отличие от метода .indexOf() , который возвращает первое вхождение, метод .lastIndexOf() возвращает индекс последнего вхождения символа или строки со смещением или без него:

String string = "Lorem ipsum dolor sit amet."; // You can also use unicode for characters System.out.println(string.lastIndexOf('i')); System.out.println(string.lastIndexOf('i', 8)); System.out.println(string.lastIndexOf("dolor")); System.out.println(string.lastIndexOf("Lorem", 10)); 

Некоторые могут быть немного удивлены результатами и скажут:

lastIndexOf(‘i’, 8) должен был вернуть 19 , так как это последнее вхождение символа после 8-го символа в строке

Стоит отметить, что при запуске метода .lastIndexOf() последовательность символов меняется на противоположную. Отсчет начинается с последнего символа и идет к первому.

Это, как говорится — ожидаемый результат — 6 последнее появление символа после пропуска 8 элементов из конца последовательности.

Шаблон с регулярным выражением и Matcher

Класс Pattern существенно скомпилированное представление регулярного выражения. Он используется вместе с классом Matcher для сопоставления последовательностей символов.

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

Если они совпадают, метод .find() приводит к true . Если шаблоны не совпадают, метод приводит к false .

Pattern pattern = Pattern.compile(".*" + "some" + ".*"); Matcher matcher = pattern.matcher("Here is some pattern!"); System.out.println(matcher.find()); 

Apache Commons

Из-за его полезности и распространенности в Java, во многих проектах Apache Commons включен в classpath. Это отличная библиотека со многими полезными функциями, часто используемыми в производстве, и проверка подстрок не является исключением.

Apache Commons предлагает класс StringUtils со многими вспомогательными методами для манипуляций со строками, нуль-проверка и т.д. Для решения этой задачи, мы можем использовать любого из методов .contains() , .indexOf() , .lastIndexOf() или .containsIgnoreCase() .

Если нет, то это так же просто, как добавить зависимость к вашему файлу pom.xml , если вы используете Maven:

 org.apache.commons commons-lang3 

Или добавив его через Gradle:

compile group: 'org.apache.commons', name: 'commons-lang3', version: '' 

StringUtils.contains()

Метод .contains() довольно прост и очень похож на основной Java подход.

Единственное отличие состоит в том, что мы не вызываем метод для проверяемой строки (поскольку он не наследует этот метод), а вместо этого передаем искомую строку вместе со строкой, которую мы ищем:

String string = "Checking for substrings within a String is a fairly common task in programming."; System.out.println(StringUtils.contains(string, "common task")); 

Примечание: этот метод чувствителен к регистру.

StringUtils.indexOf()

Естественно, метод .indexOf() также работает очень похоже на основной подход Java:

String string = "Checking for substrings within a String is a fairly common task in programming."; // Search for first occurrence of 'f' System.out.println(StringUtils.indexOf(string, 'f')); // Search for first occurrence of 'f', skipping the first 12 elements System.out.println(StringUtils.indexOf(string, 'f', 12)); // Search for the first occurrence of the "String" string System.out.println(StringUtils.indexOf(string, "String")); 

StringUtils.indexOfAny()

Метод .indexOfAny() принимает список символов, а не один, что позволяет нам искать первое вхождение любого из переданных символов:

String string = "Checking for substrings within a String is a fairly common task in programming."; // Search for first occurrence of 'f' or 'n', whichever comes first System.out.println(StringUtils.indexOfAny(string, 'f', 'n')); // Search for the first occurrence of "String" or "for", whichever comes first System.out.println(StringUtils.indexOfAny(string, "String", "for")); 

StringUtils.indexOfAnyBut()

Метод .indexOfAnyBut() ищет первое вхождение любого символа, что это не в предоставленном комплекте:

String string = "Checking for substrings within a String is a fairly common task in programming."; // Search for first character outside of the provided set 'C' and 'h' System.out.println(StringUtils.indexOfAny(string, 'C', 'h')); // Search for first character outside of the provided set 'C' and 'h' System.out.println(StringUtils.indexOfAny(string, "Checking", "for")); 

StringUtils.indexOfDifference()

Метод .indexOfDifference() сравнивает два массива символов, и возвращает индекс первого символа, отличающийся:

String s1 = "Hello World!" String s2 = "Hello world!" System.out.println(StringUtils.indexOfDifference(s1, s2));

StringUtils.indexOfIgnoreCase()

Метод .indexOfIgnoreCase() возвращает индекс первого вхождения символа в последовательности символов, игнорируя случай:

String string = "Checking for substrings within a String is a fairly common task in programming." System.out.println(StringUtils.indexOf(string, 'c')); System.out.println(StringUtils.indexOfIgnoreCase(string, 'c')); 

StringUtils.lastIndexOf()

И, наконец, метод .lastIndexOf() работает почти так же, как обычный Java-метод:

String string = "Lorem ipsum dolor sit amet."; // You can also use unicode for characters System.out.println(StringUtils.lastIndexOf(string, 'i')); System.out.println(StringUtils.lastIndexOf(string, 'i', 8)); System.out.println(StringUtils.lastIndexOf(string, "dolor")); System.out.println(StringUtils.lastIndexOf(string, "Lorem", 10)); 

StringUtils.containsIgnoreCase()

В методе .containsIgnoreCase() , проверяет содержит строка подстроку, не обращая внимания на случай:

String string = "Checking for substrings within a String is a fairly common task in programming."; System.out.println(StringUtils.containsIgnoreCase(string, "cOmMOn tAsK")); 

StringUtils.containsOnly()

Метод .containsOnly() проверяет, если последовательность символов содержит только указанные значения.

Это может вводить в заблуждение, поэтому можно сказать, что это еще один способ — он проверяет, состоит ли последовательность символов только из указанных символов. Он принимает либо строку, либо последовательность символов:

String string = "Hello World!" System.out.println(StringUtils.containsOnly(string, 'HleWord!')); System.out.println(StringUtils.containsOnly(string, "wrld")); 

Строка «Hello World!» действительно построена только из символов в последовательности ‘HleWord!’ .

Примечание: не все символы из последовательности необходимо использовать в методе string для возврата true. Важно то, что в нем нет символа, которого нет в последовательности символов.

StringUtils.containsNone()

Метод .containsNone() , содержит ли строка какой — либо из «запрещенных» символов из набора:

String string = "Hello World!" System.out.println(StringUtils.containsNone(string, 'xmt')); System.out.println(StringUtils.containsNone(string, "wrld")); 

StringUtils.containsAny()

И наконец, метод .containsAny() возвращает true , если последовательность символов содержит какой-либо из переданных параметров в форме последовательности символов или строки:

String string = "Hello World!" System.out.println(StringUtils.containsAny(string, 'h', 'm')); System.out.println(StringUtils.containsAny(string, "hell")); 

Источник

Управление строками, функции для работы со строками в Java

Java-университет

Управление строками, функции для работы со строками в Java - 1

В этом уроке мы продолжим изучение строк в Java. Основы работы со строками можно посмотреть в уроке «Строки в Java». Класс String в Java имеет набор методов для управление содержимым строки. Находить символы, подстроки, изменять регистр и другие задачи.

Получение символов и подстрок

Вы можете получить символ, находящийся на определенной позиции в строке, вызвав метод charAt() . Индекс первого символа в строке — 0, последнего — length() -1. Следующий код возвращает 9 символ строки.

 String anotherPalindrome = "Niagara. O roar again!"; char aChar = anotherPalindrome.charAt(9); 

Управление строками, функции для работы со строками в Java - 2

Нумерация символов начинается с 0, поэтому 9 символ в строке — «О». Если вам необходимо получить не один символ, а часть строки, можно использовать метод substring . Метод substring имеет два варианта: Следующий код вернет подстроку строки, начиная с 11 символа, но не включая 15, получится слово «roar»

 String anotherPalindrome = "Niagara. O roar again!"; String roar = anotherPalindrome.substring(11, 15); 

Управление строками, функции для работы со строками в Java - 4

Другие методы для управления строками

Управление строками, функции для работы со строками в Java - 5

В таблице приведены некоторые методы для работы со строками и их описание.

Поиск символов и подстрок

Управление строками, функции для работы со строками в Java - 6

Рассмотрим еще несколько методов для поиска символов и подстрок. Класс String содержит методы, которые возвращают позицию символа или подстроки в строке: indexOf() и lastIndexOf() . Методы indexOf() осуществляют поиск с начала строки, lastIndexOf() — с конца. Если данные методы не нашли совпадений, они возвращают -1. Также класс String содержит метод contains , который возвращает true, если заданная последовательность символов содержится в строке. Используйте этот метод, если необходимо узнать о существовании подстроки в строке, а её позиция не важна. В следующей таблице описываются методы indexOf() и lastIndexOf() . CharSequence — это интерфейс, который реализует класс String , поэтому вы можете передавать строки в метод contains() .

Изменение строк. Замена символов и подстрок

Управление строками, функции для работы со строками в Java - 7

Класс String имеет несколько методов для вставки символов и подстрок в строку. В таблице описаны методы для замены найденных символов и подстрок.

Пример

Следующий класс Filename показывает пример использования методов lastIndexOf() и substring() для использования разных частей строки с именем файла. Управление строками, функции для работы со строками в Java - 8Теперь рассмотрим программу, которая использует класс Filename : Управление строками, функции для работы со строками в Java - 9Программа выведет: Управление строками, функции для работы со строками в Java - 10Метод extension использует метод lastIndexOf для определения последнего вхождения » . «. Метод substring использует это значение для нахождения расширения файла. Ссылка на первоисточник: Управление строками, функции для работы со строками в Java Управление строками, функции для работы со строками в Java. Часть 2

Источник

Читайте также:  Вычислить сколько часов осталось от переданного времени до полуночи java
Оцените статью