Проверьте, начинается ли строка с префикса или нескольких значений в Java

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

1. Строка начинается с указанного префикса или значения

Метод Java String.startsWith() проверяет, начинается ли строка с указанной подстроки префикса. Префикс аргумента должен быть стандартной подстрокой, а регулярные выражения не поддерживаются.

Метод startsWith() является перегруженным методом и имеет две формы:

  • boolean startsWith(substring) – возвращает true, если подстрока является префиксом строки.
  • boolean startsWith(substring, fromIndex) – возвращает true, если строка начинается с подстроки, начинающейся с указанного индекса fromIndex.

Следующая программа Java проверяет, начинается ли строка с указанных префиксов.

String blogName = "howtodoinjava.com";boolean result = blogName.startsWith("how"); // trueboolean result = blogName.startsWith("howto"); // trueboolean result = blogName.startsWith("hello"); // falseboolean result = blogName.startsWith("do", 0); // falseboolean result = blogName.startsWith("do", 5); // true

Обратите внимание, что startsWith() не поддерживает регулярные выражения в качестве аргумента. Если мы передадим регулярное выражение в качестве аргумента, оно будет рассматриваться только как обычная строка.

String blogName = "howtodoinjava.com";Assertions.assertFalse(blogName.startsWith("^h")); 

Если вы хотите проверить префикс с помощью регулярных выражений, то вы можете использовать API Pattern and Matcher.

2. Строка начинается с указанного префикса «без учета регистра»

Если мы хотим проверить префикс строки без учета регистра, мы можем использовать класс StringUtils из Apache Common Lang. Его метод startsWithIgnoreCase() выполняет проверку без учета регистра, если строка начинается с указанного префикса.

<dependency><groupId>org.apache.commons</groupId><artifactId>commons-lang3</artifactId><version>3.13.0</version></dependency>

Давайте рассмотрим небольшой пример.

String text = "The quick brown fox jumps over the lazy dog";boolean result = StringUtils.startsWithIgnoreCase(text, "the");System.out.println(result); // true

3. Проверьте, начинается ли строка с одного из нескольких значений

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

3.1 Использование StringUtils

Класс StringUtils Apache Common Lang — это наиболее чистый подход, который может помочь в определении того, начинается ли строка с какого-либо одного префикса из нескольких значений. Его метод startsWithAny() проверяет, начинается ли строка с любого из предоставленных префиксов с учетом регистра, переданных как varargs.

Давайте рассмотрим краткий пример, чтобы понять использование метода startsWithAny().

String text = "The quick brown fox jumps over the lazy dog";boolean result = StringUtils.startsWithAny(text, "The", "A", "An");System.out.println(result); // true

3.2 Использование регулярных выражений

Другой способ проверить, начинается ли строка с определенных значений, — использовать регулярные выражения. Регулярные выражения позволяют выполнять более сложное сопоставление с шаблоном, что делает их полезными, когда вам нужно проверить несколько значений.

String text = "The quick brown fox jumps over the lazy dog";String[] prefixes = { "The", "A", "An" };String regex = "^(?:" + String.join("|", prefixes) + ").*"; // ^(?:The|A|An).*if(Pattern.compile(regex).matcher(text).matches()) {System.out.println("The string starts with one of the specified values.");} else {System.out.println("The string does not start with any of the specified values.");}

3.3 Использование цикла For

Если ни один из вариантов не кажется вам подходящим, вы можете использовать цикл for для перебора массива или коллекции префиксов и проверки каждого из них с помощью метода startsWith().

String text = "The quick brown fox jumps over the lazy dog";String[] prefixes = { "The", "A", "An" };for(String prefix : prefixes) {if(text.startsWith(prefix)) {System.out.println("The string starts with '" + prefix + "'.");break; // Exit the loop when a match is found}}

4. Заключение

В этом руководстве по Java рассматривается использование startsWith() и других методов для проверки префикса строки на соответствие одному значению или нескольким значениям.

Как видно выше, StringUtils Apache Common Lang — это самый чистый и рекомендуемый подход в случае проверки по нескольким значениям.

Исходный код на Github

Прокрутить вверх