Encodera

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.

Как сравнить строки без учёта регистра

Короткий ответ

Используйте equalsIgnoreCase():

void main() {
    IO.println("Hello".equalsIgnoreCase("HELLO"));
    IO.println("Hello".equals("HELLO"));
}

Результат:

true
false

Порядок без учёта регистра

compareToIgnoreCase() сравнивает строки по алфавиту, не обращая внимания на регистр:

void main() {
    IO.println("apple".compareToIgnoreCase("BANANA") < 0);
    IO.println("apple".compareTo("BANANA") < 0);
}

Результат:

true
false

Сортировка списка

Готовый компаратор String.CASE_INSENSITIVE_ORDER сортирует строки без учёта регистра:

void main() {
    var names = new ArrayList<>(List.of("oleg", "Anna", "boris"));
 
    names.sort(String.CASE_INSENSITIVE_ORDER);
    IO.println(names);
}

Результат:

[Anna, boris, oleg]

Поиск в списке

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

void main() {
    var roles = List.of("Admin", "Editor");
 
    IO.println(roles.contains("admin"));
    IO.println(roles.stream().anyMatch(role -> role.equalsIgnoreCase("admin")));
}

Результат:

false
true

Частая ошибка

Приведение к нижнему регистру через toLowerCase() без аргументов зависит от языка системы. В турецкой локали "TITLE".toLowerCase() даёт "tıtle" с точкой-без-точки, и сравнение ломается:

void main() {
    var turkish = Locale.of("tr");
 
    IO.println("TITLE".toLowerCase(turkish).equals("title"));
    IO.println("TITLE".equalsIgnoreCase("title"));
}

Результат:

false
true

Для сравнения используйте equalsIgnoreCase(), а если нужен toLowerCase(), передавайте Locale.ROOT.

Функции из этого ответа

  • String.equalsIgnoreCase() — Сравнивает две строки без учёта регистра букв.
  • String.compareTo() — Сравнивает две строки по алфавиту (лексикографически).
  • String.toLowerCase() — Возвращает копию строки, где все буквы строчные.
  • String.equals() — Сравнивает содержимое двух строк.

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.