Сравнение строк с игнором регистра в JavaScript: startsWith()
Быстрый ответ
Для сравнения строк без учета регистра следует привести обе строки к нижнему регистру перед применением startsWith()
:
boolean startsWithIgnoreCase = str.toLowerCase().startsWith(prefix.toLowerCase());
Такой подход позволит игнорировать регистр символов в str
и prefix
.
Использование regionMatches()
для игнорирования чувствительности к регистру
Метод regionMatches()
предоставляет возможность сравнивать определенные участки строк без учета регистра:
boolean startsWithIgnoreCase = str.regionMatches(true, 0, prefix, 0, prefix.length());
Первый аргумент ignoreCase
отвечает за игнорирование регистра при сравнении.
Рабочая с регулярными выражениями: префиксы и regex
Регулярные выражения — это весьма мощный инструмент поиска совпадений в строках, позволяющий проверить наличие префикса без учета регистра:
boolean startsWithIgnoreCase = str.matches("(?i)" + Pattern.quote(prefix) + ".*");
Метод Pattern.quote()
гарантирует правильное трактование специальных символов внутри префикса.
Дружественная библиотека Apache Commons Lang
Библиотека Apache Commons Lang предлагает удобный метод StringUtils.startsWithIgnoreCase()
для сравнения строк без учета регистра:
boolean startsWithIgnoreCase = StringUtils.startsWithIgnoreCase(str, prefix);
Для использования этого метода, следует добавить библиотеку Apache Commons Lang в список зависимостей вашего проекта.
Визуализация
Представим ситуацию: мы ищем конкретные бейсболки в магазине, причем маркировка брендов на них выполнена в разных регистрах:
String hatTag = "BaseballCap";
String searchTerm = "baseball";
boolean startsWithIgnoreCase = hatTag.toLowerCase().startsWith(searchTerm.toLowerCase());
Приведение строк к нижнему регистру дает возможность успешно их сравнивать, игнорируя регистр.
Сравниваются: [🅱aseballCap, 🅱ASEBALLcap, baseballCAP]
Искомое: 'baseball' (в любом регистре)
Результат: ✅ ВСЕ совпадения найдены
Поддержка Unicode и локалей
Применение локализованных методов toLowerCase(Locale.ENGLISH)
позволит более точно обрабатывать символы и приводить их к нижнему регистру, учитывая особенности Unicode:
boolean startsWithIgnoreCase = str.toLowerCase(Locale.ENGLISH).startsWith(prefix.toLowerCase(Locale.ENGLISH));
Это важно учитывать когда работаем с символами за пределами ASCII.
Берегитесь подводных камней
Приведение всей строки к нижнему или верхнему регистру может оказаться ресурсоемкой операцией, особенно если строка достаточно большая.
В таких случаях рекомендуется использовать regionMatches()
или StringUtils.startsWithIgnoreCase()
, что позволит оптимизировать процесс.
Сравнение с несколькими префиксами
Для сравнения строки с множеством префиксов удобно использовать потоки Java 8. Это предоставляет элегантное и масштабируемое решение:
List<String> prefixes = Arrays.asList("baseball", "basketball", "soccer");
boolean startsWithAnyIgnoreCase = prefixes.stream()
.anyMatch(prefix -> str.regionMatches(true, 0, prefix, 0, prefix.length()));
Такой подход позволяет игнорировать регистр при проверке наличия префикса.
Полезные материалы
- StringUtils (Apache Commons Lang 3.14.0 API) — библиотека Apache Commons Lang, предлагающая все необходимое для работы со строками без учета регистра.
- String (Java Platform SE 7) — описание синтаксиса и работы метода
toLowerCase()
в официальной документации Java. - UTR#21: Case Mappings — значимый ресурс для тех, кто хочет понять, как осуществляется игнорирование регистра в Unicode.
- Regular Expressions in Java – Tutorial — подробная статья о особенностях и мощи работы с регулярными выражениями в Java.
- Java Practices->Time Execution Speed — материал, который поможет вам оптимизировать скорость выполнения операций сравнения строк с учетом локали.