Spec-Zone.ru › OpenJDK 27

Класс 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);
Примечание реализации:
В этой реализации параллельное использование данного класса может привести к значительной конкуренции потоков, поскольку для обеспечения потокобезопасности используется synchronized. Поэтому при использовании этого класса в многопоточной среде рекомендуется создавать отдельный экземпляр для каждого потока.
Начиная с версии:
1.1
См. также:
  • Collator
  • CollationElementIterator

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

Поля, объявленные в классе 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(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
Модификатор и тип Метод Описание
int compare(Object o1, Object o2)
Сравнивает два аргумента по порядку.
boolean equals(String source, String target)
Удобный метод для сравнения двух строк на равенство на основе правил сортировки этого Collator.
static Locale[] getAvailableLocales()
Возвращает массив всех локалей, для которых методы getInstance этого класса могут возвращать локализованные экземпляры.
int getDecomposition()
Получает режим декомпозиции этого Collator.
static Collator getInstance()
Получает Collator для текущей локали по умолчанию.
static Collator getInstance(Locale desiredLocale)
Получает Collator для нужной локали.
int getStrength()
Возвращает свойство уровня этого Collator.
void setDecomposition(int decompositionMode)
Устанавливает режим декомпозиции этого Collator.
void setStrength(int newStrength)
Устанавливает свойство уровня этого 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(long timeoutMillis)
Заставляет текущий поток ожидать пробуждения, обычно в результате вызова notify или interrupt, либо до истечения заданного промежутка реального времени.
final void wait(long timeoutMillis, int nanos)
Заставляет текущий поток ожидать пробуждения, обычно в результате вызова notify или interrupt, либо до истечения заданного промежутка реального времени.

Методы, объявленные в интерфейсе Comparator

max, min, reversed, thenComparing, thenComparing, thenComparing, thenComparingDouble, thenComparingInt, thenComparingLong
Модификатор и тип Метод Описание
default <U extends T>
U
max(U o1, U o2)
Возвращает большее из двух значений согласно этому компаратору.
default <U extends T>
U
min(U o1, U o2)
Возвращает меньшее из двух значений согласно этому компаратору.
default Comparator<Object> reversed()
Возвращает компаратор, задающий порядок, обратный порядку этого компаратора.
default Comparator<Object> thenComparing(Comparator<? super Object> other)
Возвращает компаратор лексикографического порядка с другим компаратором.
default <U extends Comparable<? super U>>
Comparator<Object>
thenComparing(Function<? super Object, ? extends U> keyExtractor)
Возвращает компаратор лексикографического порядка с функцией, извлекающей ключ сортировки типа Comparable.
default <U> Comparator<Object> thenComparing(Function<? super Object, ? extends U> keyExtractor, Comparator<? super U> keyComparator)
Возвращает компаратор лексикографического порядка с функцией, извлекающей ключ для сравнения с указанным Comparator.
default Comparator<Object> thenComparingDouble(ToDoubleFunction<? super Object> keyExtractor)
Возвращает компаратор лексикографического порядка с функцией, извлекающей ключ сортировки типа double.
default Comparator<Object> thenComparingInt(ToIntFunction<? super Object> keyExtractor)
Возвращает компаратор лексикографического порядка с функцией, извлекающей ключ сортировки типа int.
default Comparator<Object> thenComparingLong(ToLongFunction<? super Object> keyExtractor)
Возвращает компаратор лексикографического порядка с функцией, извлекающей ключ сортировки типа long.

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

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, 2026, 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.

Spec-Zone.ru

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