Класс 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);
- Начиная с версии:
- 1.1
- См. также:
Краткое описание полей
Поля, объявленные в классе Collator
CANONICAL_DECOMPOSITION, FULL_DECOMPOSITION, IDENTICAL, NO_DECOMPOSITION, PRIMARY, SECONDARY, 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
Методы, объявленные в классе Object
finalize, getClass, notify, notifyAll, toString, wait, wait, wait
Методы, объявленные в интерфейсе Comparator
reversed, thenComparing, thenComparing, thenComparing, thenComparingDouble, thenComparingInt, thenComparingLong
Подробное описание конструкторов
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.
https://docs.oracle.com/en/java/javase/25/docs/api/java.base/java/text/RuleBasedCollator.html