Spec-Zone.ru › OpenJDK 24

Класс RuleBasedCollator

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

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,A < b,B ... &ae;\u00e3&AE;\u00c3"). [\u00e3 и \u00c3, конечно, являются последовательностями экранирования для умлаута «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

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

Поля, объявленные в классе 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 - целевая строка.
Возвращает:
Возвращает целое значение. Значение меньше нуля, если source меньше target; значение равно нулю, если source и target равны; значение больше нуля, если 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.equals(Object)
  • Object.hashCode()

hashCode

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

© 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://download.java.net/java/early_access/jdk24/docs/api/java.base/java/text/RuleBasedCollator.html

Spec-Zone.ru

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