Класс 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 - целевая строка.
Возвращает:
Возвращает целое значение. Значение меньше нуля, если исходная строка меньше целевой, значение равно нулю, если исходная и целевая строки равны, значение больше нуля, если исходная строка больше целевой.
Исключения:
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, 2020, 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/11/docs/api/java.base/java/text/RuleBasedCollator.html

Spec-Zone .ru
спецификации, руководства, описания, API