Сортировка строк Java Юникод - PullRequest
6 голосов
/ 25 марта 2011

Как в Java сравниваются строки Unicode?

Я имею в виду, если я скажу несколько строк, японские строки, когда я делаю следующее:

java.util.Arrays.sort(arrayOfJapaneseStrings);

какэти строки сравниваются и сортируются?

Ответы [ 3 ]

10 голосов
/ 25 марта 2011

По умолчанию строки сортируются лексикографически в порядке Юникода. Порядок указывается по UTF-16, поэтому он может быть не совсем тем, что вы хотите для определенных символов, но все японские символы находятся в BMP , поэтому у вас не должно быть проблем с ними.

Если вы хотите использовать другой порядок сортировки, вы можете использовать классы java.text.Collator для определения другого порядка сортировки.

2 голосов
/ 25 марта 2011

По умолчанию используется сравнение байт-кода UTF-16.Это самый быстрый способ, и, следовательно, идеально, если все, что вам нужно, это какой-то порядок (например, если вы собираетесь использовать бинарный поиск позже, вам нужно, чтобы они были в порядке, но только в том, что "в порядке")значит не имеет значения, поэтому чем быстрее, тем лучше).

Если вам нужно упорядочение, разумное для пользователя в данной локали, используйте класс java.text.Collator.

0 голосов
/ 25 марта 2011

Согласно compareTo методу класса String. См. Javadoc :

Сравнивает две строки лексически. Сравнение основано на значении Unicode каждого символа в струны. Последовательность символов, представленная этим String объект сравнивается лексикографически с последовательность символов, представленная строкой аргумента. Результат отрицательное целое число, если этот String объект лексикографически предшествует строке аргумента. Результатом является положительное целое число, если этот String объект лексически следует за строкой аргумента. Результат равен нулю, если строки равны; compareTo возврат 0 точно когда метод {@link #equals (Object)} вернет true.

...