Spec-Zone.ru › OpenJDK 21

Класс RuleBasedCollator

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

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

  1. Если указано специальное правило сортировки, контролируемое <модификатором>, оно применяется ко всему объекту коллатора.
  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 < b,B ... &ae;\u00e3&AE;\u00c3"). [\u00e3 и \u00c3, конечно, являются escape-последовательностями для умляута.]

Игнорируемые символы

Для игнорируемых символов первое правило должно начинаться с отношения (приведённые выше примеры — это фрагменты; "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

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

Поля, объявленные в классе java.text.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()
Генерирует хэш-код для табличного объекта коллатора

Методы, объявленные в классе java.text.Collator

compare, equals, getAvailableLocales, getDecomposition, getInstance, getInstance, getStrength, setDecomposition, setStrength

Методы, объявленные в классе java.lang.Object

finalize, getClass, notify, notifyAll, toString, wait, wait, wait

Методы, объявленные в интерфейсе java.util.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(java.lang.String)

getCollationKey

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

clone

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

equals

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

hashCode

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

© 1993, 2023, 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/21/docs/api/java.base/java/text/RuleBasedCollator.html

Spec-Zone.ru

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