Сравнение строк в Java: string.compareTo и Collator

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

Вы, наверное, также как и я сравнивали всю жизнь строки в Java с помощью метода compareTo в String:

В консоли будет выведено:

Этот метод осуществляет сортировку в соответствии с кодом символа в Юникод, то есть для большинства языков (и для русского в том числе) сравнение получается вполне корректным. Про метод compareTo и другие методы в классе String можно прочесть в моём учебнике.

Но сортировка получается правильной не для всех. Для правильного сравнения строк нужно обязательно учитывать язык, на котором написаны эти строки, то есть нужно учитывать Locale. В метод compareTo нельзя передать Locale, для правильного сравнения строк в соответствии с конкретной локалью нужно использовать класс java.text.Collator:

Результат:

Использовать Collator для сравнения строк на английском языке особого смысла нет, да и для русского он не особо полезен. Он может быть полезен в случаях, когда вы используете какой-нибудь более экзотический язык.

Также Collator может пригодиться, если вам нужно сравнивать строки так, чтобы буквы «ё» и «е» считались одинаковыми. Для этого нужно использовать метод setStrength, который имеет параметр, влияющий на сравнение. Параметр может принимать четыре значения, воздействие которых зависит от Locale для которого создан Collator. Вот эти четыре значения: PRIMARY, SECONDARY, TERTIARY и IDENTICAL. Пример кода, который сравнивает строки, считая «Ё» и «Е» идентичными буквами, а также не учитывает регистр символов:

Результат:

 

Ссылки:

JavaDoc по java.text.Collator

 

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *