Класс RuleBasedCollator
- Все реализованные интерфейсы:
-
Cloneable,Comparator<Object>
public class RuleBasedCollator extends Collator
RuleBasedCollator — это конкретный подкласс Collator, который предоставляет простой, основанный на данных, сортировщик таблиц. С помощью этого класса вы можете создать настраиваемый сортировщик таблиц. Collator. RuleBasedCollator отображает символы на ключи сортировки. RuleBasedCollator имеет следующие ограничения для повышения эффективности (другие подклассы могут быть использованы для более сложных языков):
- Если указано специальное правило сортировки, управляемое модификатором <modifier>, оно применяется ко всему объекту сортировщика.
- Все не указанные символы находятся в конце порядка сортировки.
Таблица сортировки состоит из списка правил сортировки, где каждое правило имеет один из трех форматов:
<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 & 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 < c a < c & a < b
Игнорируемые символы
Для игнорируемых символов первое правило должно начинаться с отношения (приведенные выше примеры — это фрагменты; "a < b" на самом деле должно быть "< a < b"). Однако, если первое отношение не "<", то все текстовые аргументы до первого "<" считаются игнорируемыми. Например, ", - < a < b" делает "-" игнорируемым символом, как мы видели ранее в слове "черные-птицы". В примерах для разных языков вы видите, что большинство акцентов игнорируются.
Нормализация и акценты
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
- См. также:
Краткое описание полей
Поля, объявленные в классе java.text.Collator
CANONICAL_DECOMPOSITION, FULL_DECOMPOSITION, IDENTICAL, NO_DECOMPOSITION, PRIMARY, SECONDARY, TERTIARY
Краткое описание конструкторов
| Конструктор | Описание |
|---|---|
RuleBasedCollator |
Конструктор RuleBasedCollator. |
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
Object |
clone() |
Стандартная перегрузка; семантика не изменяется. |
int |
compare |
Сравнивает данные символов, хранящиеся в двух разных строках, на основе правил сортировки. |
boolean |
equals |
Сравнивает равенство двух объектов сортировки. |
CollationElementIterator |
getCollationElementIterator |
Возвращает CollationElementIterator для данной строки. |
CollationElementIterator |
getCollationElementIterator |
Возвращает CollationElementIterator для данного CharacterIterator. |
CollationKey |
getCollationKey |
Преобразует строку в серию символов, которые можно сравнить с 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
- Параметры:
-
rules- правила сортировки для построения таблицы сопоставления. - Исключения:
-
ParseException- Исключение формата будет выброшено, если процесс построения правил завершится ошибкой. Например, правило «a < ? < d» приведёт к тому, что конструктор выбросит исключение ParseException, так как символ «?» не заключён в кавычки. - См. также:
Подробное описание методов
getRules
public String getRules()
- Возвращает:
- возвращает правила сортировки, по которым был создан объект табличной сортировки.
getCollationElementIterator
public CollationElementIterator getCollationElementIterator(String source)
- Параметры:
-
source- строка, подлежащая сортировке - Возвращает:
- объект
CollationElementIterator - См. также:
getCollationElementIterator
public CollationElementIterator getCollationElementIterator(CharacterIterator source)
- Параметры:
-
source- итератор символов, подлежащий сортировке - Возвращает:
- объект
CollationElementIterator - С тех пор как:
- 1.2
- См. также:
compare
public int compare(String source, String target)
- Задано в:
-
compareв классеCollator - Параметры:
-
source- исходная строка. -
target- целевая строка. - Возвращает:
- Возвращает целое значение. Значение меньше нуля, если исходная строка меньше целевой, значение равно нулю, если исходная и целевая строки равны, значение больше нуля, если исходная строка больше целевой.
- Исключения:
-
NullPointerException- еслиsourceилиtargetравно null. - См. также:
getCollationKey
public CollationKey getCollationKey(String source)
- Задано в:
-
getCollationKeyв классеCollator - Параметры:
-
source- строка, подлежащая преобразованию в ключ сортировки. - Возвращает:
- CollationKey для заданной строки на основе правил сортировки данного Collator. Если исходная строка равна null, возвращается null CollationKey.
- См. также:
clone
public Object clone()
- Переопределяет:
-
cloneв классеCollator - Возвращает:
- клонированный экземпляр.
- См. также:
equals
public boolean equals(Object obj)
- Задано в:
-
equalsв интерфейсеComparator<Object> - Переопределяет:
-
equalsв классеCollator - Параметры:
-
obj- объект табличной сортировки, который нужно сравнить с текущим. - Возвращает:
- true, если текущий объект табличной сортировки совпадает с объектом табличной сортировки obj; false в противном случае.
- См. также:
hashCode
public int hashCode()
- Задано в:
-
hashCodeв классеCollator - Возвращает:
- значение хэш-кода для данного объекта.
- См. также:
© 1993, 2021, 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/17/docs/api/java.base/java/text/RuleBasedCollator.html