Класс RuleBasedCollator
- Все реализуемые интерфейсы:
Cloneable, Comparator<Object>
public class RuleBasedCollator extends Collator
RuleBasedCollator — конкретный подкласс Collator, предоставляющий простой табличный сортировщик, управляемый данными. С его помощью можно создать настраиваемый табличный Collator. RuleBasedCollator сопоставляет символы ключам сортировки. RuleBasedCollator имеет следующие ограничения, обусловленные эффективностью (для более сложных языков могут использоваться другие подклассы):
- Если задано специальное правило сортировки, управляемое <modifier>, оно применяется ко всему объекту сортировщика.
- Все неупомянутые символы располагаются в конце порядка сортировки.
Таблица сортировки состоит из списка правил сортировки, каждое из которых имеет одну из трёх форм:
<modifier> <relation> <text-argument> <reset> <text-argument>Определения элементов правила следующие:
-
Текстовый аргумент: текстовый аргумент — это любая последовательность символов, за исключением специальных символов (то есть обычных пробельных символов [0009-000D, 0020] и символов синтаксиса правил [0021-002F, 003A-0040, 005B-0060, 007B-007E]). Если требуются эти символы, их можно заключить в одинарные кавычки (например, амперсанд => '&'). Обратите внимание, что не заключённые в кавычки пробельные символы игнорируются; например,
b cрассматривается какbc. -
Модификатор: в настоящее время существуют два модификатора, включающих специальные правила сортировки.
- '@' : включает обратную сортировку акцентов (вторичных различий), как во французском языке.
- '!' : включает перестановку гласных и согласных в тайском/лаосском языках. Если это правило действует, то тайская гласная из диапазона \U0E40-\U0E44, предшествующая тайской согласной из диапазона \U0E01-\U0E2E, ИЛИ лаосская гласная из диапазона \U0EC0-\U0EC4, предшествующая лаосской согласной из диапазона \U0E81-\U0EAE, при сортировке помещается после согласной.
'@' : указывает, что акценты сортируются в обратном порядке, как во французском языке.
-
Отношение: используются следующие отношения:
- '<' : больше, как при различии букв (первичный уровень)
- ';' : больше, как при различии акцентов (вторичный уровень)
- ',' : больше, как при различии регистра (третичный уровень)
- '=' : равно
-
Сброс: существует один оператор сброса, который используется преимущественно для лигатур и расширений, но также может добавлять модификацию в конец набора правил.
'&' : указывает, что следующее правило следует за позицией, в которой сортировался бы текстовый аргумент сброса.
На практике это проще, чем кажется. Например, следующие записи эквивалентны и выражают одно и то же:
Обратите внимание, что порядок важен: следующий элемент располагается непосредственно после текстового аргумента. Следующие записи не эквивалентны:a < b < c a < b & b < c a < c & a < b
Текстовый аргумент должен уже присутствовать в последовательности либо в ней должна присутствовать начальная подстрока этого текстового аргумента. (Например, "a < b & ae < e" — допустимая запись, поскольку "a" присутствует в последовательности до сброса "ae".) В последнем случае "ae" не добавляется и не рассматривается как один символ; вместо этого "e" сортируется так, как если бы оно было расширено до двух символов: "a", за которым следует "e". Такое различие встречается в естественных языках: в традиционном испанском "ch" рассматривается как последовательность, объединяющаяся в один символ (выражается как "c < ch < d"), тогда как в традиционном немецком умлаут a рассматривается как последовательность, расширяющаяся до двух символов (выражается как "a,A < b,B ... &ae;\u00e3&AE;\u00c3"). [\u00e3 и \u00c3 — это, разумеется, escape-последовательности для умлаута a.]a < b & a < c a < c & a < b
Игнорируемые символы
Для игнорируемых символов первое правило должно начинаться с отношения (приведённые выше примеры на самом деле являются фрагментами; вместо "a < b" должно быть "< a < b"). Однако если первое отношение не равно "<", все текстовые аргументы до первого "<" игнорируются. Например, ", - < a < b" делает "-" игнорируемым символом, как мы видели ранее на примере слова "black-birds". В примерах для разных языков видно, что большинство акцентов игнорируются.
Нормализация и акценты
RuleBasedCollator автоматически обрабатывает таблицу правил, добавляя в неё как предварительно составленные символы с акцентами, так и их варианты с комбинируемыми символами. Даже если переданная строка правил содержит только базовые символы и отдельные комбинируемые символы акцентов, в таблицу будут добавлены предварительно составленные символы с акцентами, соответствующие всем каноническим комбинациям символов из строки правил.
Это позволяет использовать RuleBasedCollator для сравнения строк с акцентами, даже если для сортировщика установлен режим NO_DECOMPOSITION. Однако есть два нюанса. Во-первых, если сортируемые строки содержат комбинируемые последовательности, которые могут быть расположены не в каноническом порядке, для сортировки таких последовательностей следует установить режим CANONICAL_DECOMPOSITION или FULL_DECOMPOSITION. Во-вторых, если строки содержат символы с совместимыми разложениями (например, полноширинные и полуширинные формы), необходимо использовать FULL_DECOMPOSITION, поскольку таблицы правил содержат только канонические соответствия.
Ошибки
Ошибками являются следующие случаи:
- Текстовый аргумент содержит не заключённые в кавычки знаки пунктуации (например, "a < b-c < d").
- За символом отношения или сброса не следует текстовый аргумент (например, "a < ,b").
- Сброс, при котором текстовый аргумент (или его начальная подстрока) ещё не присутствует в последовательности (например, "a < b & e < f").
RuleBasedCollator выбрасывает ParseException. Примеры
Простой: "< a < b < c < d"
Норвежский: "< a, A < b, B < c, C < d, D < e, E < f, F < g, G < h, H < i, I < j, J < k, K < l, L < m, M < n, N < o, O < p, P < q, Q < r, R < s, S < t, T < u, U < v, V < w, W < x, X < y, Y < z, Z < \u00E6, \u00C6 < \u00F8, \u00D8 < \u00E5 = a\u030A, \u00C5 = A\u030A; aa, AA"
Чтобы создать объект RuleBasedCollator со специальными правилами, настроенными под ваши задачи, создайте RuleBasedCollator, используя правила, содержащиеся в объекте String. Например:
Или:String simple = "< a< b< c< d"; RuleBasedCollator mySimple = new RuleBasedCollator(simple);
String Norwegian = "< a, A < b, B < c, C < d, D < e, E < f, F < g, G < h, H < i, I" +
"< j, J < k, K < l, L < m, M < n, N < o, O < p, P < q, Q < r, R" +
"< s, S < t, T < u, U < v, V < w, W < x, X < y, Y < z, Z" +
"< \u00E6, \u00C6" + // Latin letter ae & AE
"< \u00F8, \u00D8" + // Latin letter o & O with stroke
"< \u00E5 = a\u030A," + // Latin letter a with ring above
" \u00C5 = A\u030A;" + // Latin letter A with ring above
" aa, AA";
RuleBasedCollator myNorwegian = new RuleBasedCollator(Norwegian);
Новую строку правил сортировки можно создать, объединив строки правил. Например, правила, возвращаемые методом getRules(), можно объединить, чтобы составить несколько RuleBasedCollator.
В следующем примере показано, как изменить порядок неинтервалных акцентов,
// old rule
String oldRules = "=\u0301;\u0300;\u0302;\u0308" // main accents
+ ";\u0327;\u0303;\u0304;\u0305" // main accents
+ ";\u0306;\u0307;\u0309;\u030A" // main accents
+ ";\u030B;\u030C;\u030D;\u030E" // main accents
+ ";\u030F;\u0310;\u0311;\u0312" // main accents
+ "< a , A ; ae, AE ; \u00e6 , \u00c6"
+ "< b , B < c, C < e, E & C < d, D";
// change the order of accent characters
String addOn = "& \u0300 ; \u0308 ; \u0302";
RuleBasedCollator myCollator = new RuleBasedCollator(oldRules + addOn);
- Примечание реализации:
- В этой реализации параллельное использование данного класса может привести к значительной конкуренции потоков, поскольку для обеспечения потокобезопасности используется
synchronized. Поэтому при использовании этого класса в многопоточной среде рекомендуется создавать отдельный экземпляр для каждого потока. - Начиная с версии:
- 1.1
- См. также:
Краткое описание полей
Поля, объявленные в классе Collator
CANONICAL_DECOMPOSITION, FULL_DECOMPOSITION, IDENTICAL, NO_DECOMPOSITION, PRIMARY, SECONDARY, TERTIARY | Модификатор и тип | Поле | Описание |
|---|---|---|
static final int |
CANONICAL_DECOMPOSITION |
Значение режима декомпозиции. |
static final int |
FULL_DECOMPOSITION |
Значение режима декомпозиции. |
static final int |
IDENTICAL |
Значение уровня сортировщика. |
static final int |
NO_DECOMPOSITION |
Значение режима декомпозиции. |
static final int |
PRIMARY |
Значение уровня сортировщика. |
static final int |
SECONDARY |
Значение уровня сортировщика. |
static final int |
TERTIARY |
Значение уровня сортировщика. |
Краткое описание конструкторов
| Конструктор | Описание |
|---|---|
RuleBasedCollator |
Конструктор RuleBasedCollator. |
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
Object |
clone() |
Стандартное переопределение; семантика не изменяется. |
int |
compare |
Сравнивает символьные данные, хранящиеся в двух разных строках, на основе правил сортировки. |
boolean |
equals |
Сравнивает объекты сортировки на равенство. |
CollationElementIterator |
getCollationElementIterator |
Возвращает CollationElementIterator для указанной строки. |
CollationElementIterator |
getCollationElementIterator |
Возвращает CollationElementIterator для указанного CharacterIterator. |
CollationKey |
getCollationKey |
Преобразует строку в последовательность символов, которую можно сравнить с помощью CollationKey.compareTo. |
String |
getRules() |
Получает табличные правила сортировки объекта. |
int |
hashCode() |
Создаёт хеш-код табличного объекта сортировки. |
Методы, объявленные в классе Collator
compare, equals, getAvailableLocales, getDecomposition, getInstance, getInstance, getStrength, setDecomposition, setStrength | Модификатор и тип | Метод | Описание |
|---|---|---|
int |
compare |
Сравнивает два аргумента по порядку. |
boolean |
equals |
Удобный метод для сравнения двух строк на равенство на основе правил сортировки этого Collator. |
static Locale[] |
getAvailableLocales() |
Возвращает массив всех локалей, для которых методы getInstance этого класса могут возвращать локализованные экземпляры. |
int |
getDecomposition() |
Получает режим декомпозиции этого Collator. |
static Collator |
getInstance() |
Получает Collator для текущей локали по умолчанию. |
static Collator |
getInstance |
Получает Collator для нужной локали. |
int |
getStrength() |
Возвращает свойство уровня этого Collator. |
void |
setDecomposition |
Устанавливает режим декомпозиции этого Collator. |
void |
setStrength |
Устанавливает свойство уровня этого Collator. |
Методы, объявленные в классе Object
finalize, getClass, notify, notifyAll, toString, wait, wait, wait | Модификатор и тип | Метод | Описание |
|---|---|---|
protected void |
finalize() |
Устарело, будет удалено: этот элемент API планируется удалить в будущей версии. Финализация устарела и планируется к удалению в одном из будущих выпусков. |
final Class |
getClass() |
Возвращает класс времени выполнения этого Object. |
final void |
notify() |
Пробуждает один поток, ожидающий на мониторе этого объекта. |
final void |
notifyAll() |
Пробуждает все потоки, ожидающие на мониторе этого объекта. |
String |
toString() |
Возвращает строковое представление объекта. |
final void |
wait() |
Заставляет текущий поток ожидать пробуждения, обычно в результате вызова notify или interrupt. |
final void |
wait |
Заставляет текущий поток ожидать пробуждения, обычно в результате вызова notify или interrupt, либо до истечения заданного промежутка реального времени. |
final void |
wait |
Заставляет текущий поток ожидать пробуждения, обычно в результате вызова notify или interrupt, либо до истечения заданного промежутка реального времени. |
Методы, объявленные в интерфейсе Comparator
max, min, reversed, thenComparing, thenComparing, thenComparing, thenComparingDouble, thenComparingInt, thenComparingLong | Модификатор и тип | Метод | Описание |
|---|---|---|
default <U extends T> |
max |
Возвращает большее из двух значений согласно этому компаратору. |
default <U extends T> |
min |
Возвращает меньшее из двух значений согласно этому компаратору. |
default Comparator |
reversed() |
Возвращает компаратор, задающий порядок, обратный порядку этого компаратора. |
default Comparator |
thenComparing |
Возвращает компаратор лексикографического порядка с другим компаратором. |
default <U extends Comparable<? super U>> |
thenComparing |
Возвращает компаратор лексикографического порядка с функцией, извлекающей ключ сортировки типа Comparable. |
default <U> Comparator |
thenComparing |
Возвращает компаратор лексикографического порядка с функцией, извлекающей ключ для сравнения с указанным Comparator. |
default Comparator |
thenComparingDouble |
Возвращает компаратор лексикографического порядка с функцией, извлекающей ключ сортировки типа double. |
default Comparator |
thenComparingInt |
Возвращает компаратор лексикографического порядка с функцией, извлекающей ключ сортировки типа int. |
default Comparator |
thenComparingLong |
Возвращает компаратор лексикографического порядка с функцией, извлекающей ключ сортировки типа long. |
Подробное описание конструкторов
RuleBasedCollator
public RuleBasedCollator(String rules) throws ParseException
- Параметры:
-
rules— правила сортировки, на основе которых строится таблица сортировки. - Выбрасывает:
-
ParseException— если при построении правил возникает ошибка форматирования. Например, правило "a < ? < d" приведёт к тому, что конструктор выбросит ParseException, поскольку символ '?' не заключён в кавычки. - См. также:
Подробное описание методов
getRules
public String getRules()
- Возвращает:
- правила сортировки, на основе которых был создан табличный объект сортировки.
getCollationElementIterator
public CollationElementIterator getCollationElementIterator(String source)
- Параметры:
-
source— строка для сортировки - Возвращает:
- объект
CollationElementIterator - См. также:
getCollationElementIterator
public CollationElementIterator getCollationElementIterator(CharacterIterator source)
- Параметры:
-
source— итератор символов для сортировки - Возвращает:
- объект
CollationElementIterator - Начиная с версии:
- 1.2
- См. также:
compare
public int compare(String source, String target)
- Объявлен в:
-
compareв классеCollator - Параметры:
-
source— исходная строка. -
target— целевая строка. - Возвращает:
- целочисленное значение. Значение меньше нуля, если исходная строка меньше целевой; равно нулю, если исходная и целевая строки равны; больше нуля, если исходная строка больше целевой.
- Выбрасывает:
-
NullPointerException— еслиsourceилиtargetимеет значение null. - См. также:
getCollationKey
public CollationKey getCollationKey(String source)
- Объявлен в:
-
getCollationKeyв классеCollator - Параметры:
-
source— строка, преобразуемая в ключ сортировки. - Возвращает:
- CollationKey для указанной строки на основе правил сортировки этого Collator. Если исходная строка равна null, возвращается null в качестве CollationKey.
- См. также:
clone
equals
public boolean equals(Object obj)
- Объявлен в:
-
equalsв интерфейсеComparator<Object> - Переопределяет:
-
equalsв классеCollator - Параметры:
-
obj— табличный объект сортировки для сравнения с этим объектом. - Возвращает:
- true, если текущий табличный объект сортировки совпадает с табличным объектом сортировки obj; в противном случае — false.
- См. также:
hashCode
© 1993, 2025, Oracle and/or its affiliates. All rights reserved.
Documentation extracted from Debian's OpenJDK Development Kit package.
Licensed under the GNU General Public License, version 2, with the Classpath Exception.
Various third party code in OpenJDK is licensed under different licenses (see Debian package).
Java and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates.