Spec-Zone.ru › OpenJDK 25

Класс RuleBasedCollator

java.lang.Object
java.text.Collator
java.text.RuleBasedCollator
Все реализуемые интерфейсы:
Cloneable, Comparator<Object>
public class RuleBasedCollator extends Collator
Класс RuleBasedCollator — конкретный подкласс Collator, предоставляющий простой табличный компаратор, управляемый данными. С помощью этого класса можно создать настраиваемый табличный Collator. RuleBasedCollator сопоставляет символы с ключами сортировки.

RuleBasedCollator имеет следующие ограничения, обеспечивающие эффективность (для более сложных языков можно использовать другие подклассы):

  1. Если указано специальное правило сортировки, управляемое <modifier>, оно применяется ко всему объекту компаратора.
  2. Все неупомянутые символы располагаются в конце порядка сортировки.

Таблица сортировки состоит из списка правил сортировки, каждое из которых имеет одну из трёх форм:

   <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 & a < 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 < 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
  • CollationElementIterator

Краткое описание полей

Поля, объявленные в классе Collator

CANONICAL_DECOMPOSITION, FULL_DECOMPOSITION, IDENTICAL, NO_DECOMPOSITION, PRIMARY, SECONDARY, TERTIARY

Краткое описание конструкторов

Конструктор Описание
RuleBasedCollator(String rules)
Конструктор RuleBasedCollator.

Краткое описание методов

Модификатор и тип Метод Описание
Object clone()
Стандартное переопределение; семантика не изменяется.
int compare(String source, String target)
Сравнивает символьные данные, хранящиеся в двух разных строках, на основе правил сортировки.
boolean equals(Object obj)
Сравнивает два объекта сортировки на равенство.
CollationElementIterator getCollationElementIterator(String source)
Возвращает CollationElementIterator для заданной строки.
CollationElementIterator getCollationElementIterator(CharacterIterator source)
Возвращает CollationElementIterator для заданного CharacterIterator.
CollationKey getCollationKey(String source)
Преобразует строку в последовательность символов, которую можно сравнить с помощью 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
Конструктор RuleBasedCollator. Он принимает правила таблицы и на их основе строит таблицу сортировки. Подробные сведения о синтаксисе правил сортировки см. в описании класса RuleBasedCollator.
Параметры:
rules — правила сортировки, на основе которых строится таблица сортировки.
Исключения:
ParseException — если при построении правил возникает ошибка, будет выброшено исключение формата. Например, правило "a < ? < d" приведёт к тому, что конструктор выбросит ParseException, поскольку символ '?' не заключён в кавычки.
См. также:
  • Locale

Подробное описание методов

getRules

public String getRules()
Возвращает табличные правила для объекта сортировки.
Возвращает:
правила сортировки, на основе которых был создан табличный объект сортировки.

getCollationElementIterator

public CollationElementIterator getCollationElementIterator(String source)
Возвращает CollationElementIterator для заданной строки.
Параметры:
source — строка для сортировки
Возвращает:
объект CollationElementIterator
См. также:
  • CollationElementIterator

getCollationElementIterator

public CollationElementIterator getCollationElementIterator(CharacterIterator source)
Возвращает CollationElementIterator для заданного CharacterIterator.
Параметры:
source — итератор символов для сортировки
Возвращает:
объект CollationElementIterator
Начиная с версии:
1.2
См. также:
  • CollationElementIterator

compare

public int compare(String source, String target)
Сравнивает символьные данные, хранящиеся в двух разных строках, на основе правил сортировки. Возвращает сведения о том, меньше ли строка другой строки, больше неё или равна ей в данном языке. Этот метод можно переопределить в подклассе.
Определён в:
compare в классе Collator
Параметры:
source — исходная строка.
target — целевая строка.
Возвращает:
Целочисленное значение. Значение меньше нуля, если исходная строка меньше целевой; равно нулю, если исходная и целевая строки равны; больше нуля, если исходная строка больше целевой.
Исключения:
NullPointerException — если source или target равно null.
См. также:
  • CollationKey
  • Collator.getCollationKey(String)

getCollationKey

public CollationKey getCollationKey(String source)
Преобразует строку в последовательность символов, которую можно сравнить с помощью CollationKey.compareTo. Переопределяет java.text.Collator.getCollationKey. Этот метод можно переопределить в подклассе.
Определён в:
getCollationKey в классе Collator
Параметры:
source — строка, преобразуемая в ключ сортировки.
Возвращает:
CollationKey для заданной строки на основе правил сортировки этого Collator. Если исходная строка равна null, возвращается null CollationKey.
См. также:
  • CollationKey
  • Collator.compare(String, String)

clone

public Object clone()
Стандартное переопределение; семантика не изменяется.
Переопределяет:
clone в классе Collator
Возвращает:
клон этого экземпляра.
См. также:
  • Cloneable

equals

public boolean equals(Object obj)
Сравнивает два объекта сортировки на равенство.
Определён в:
equals в интерфейсе Comparator<Object>
Переопределяет:
equals в классе Collator
Параметры:
obj — табличный объект сортировки, сравниваемый с текущим.
Возвращает:
true, если текущий табличный объект сортировки совпадает с табличным объектом сортировки obj; в противном случае — false.
См. также:
  • Object.equals(Object)
  • Object.hashCode()

hashCode

public int hashCode()
Генерирует хеш-код для табличного объекта сортировки
Определён в:
hashCode в классе Collator
Возвращает:
значение хеш-кода для этого объекта
См. также:
  • Object.equals(java.lang.Object)
  • System.identityHashCode(Object)

Сообщить об ошибке или предложить улучшение
Дополнительную справочную информацию по API и документацию для разработчиков см. в разделе Документация Java SE, содержащем более подробные описания для разработчиков, общие сведения, определения терминов, обходные решения и рабочие примеры кода. Другие версии.
Java является товарным знаком или зарегистрированным товарным знаком Oracle и/или её аффилированных лиц в США и других странах.
Авторское право © 1993, 2025, Oracle и/или её аффилированные лица, 500 Oracle Parkway, Redwood Shores, CA 94065 USA.
Все права защищены. Использование регулируется условиями лицензии и политикой распространения документации.

© 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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API