Класс RuleBasedCollator
- java.lang.Object
-
- java.text.Collator
-
- java.text.RuleBasedCollator
- Все реализуемые интерфейсы:
- Cloneable, Comparator<Object>
public class RuleBasedCollator extends Collator
Класс RuleBasedCollator — это конкретный подкласс Collator, предоставляющий простой, основанный на данных, сортировщик таблиц. С помощью этого класса можно создать настраиваемый сортировщик, основанный на таблице. Collator. RuleBasedCollator сопоставляет символы с ключами сортировки.
У RuleBasedCollator есть следующие ограничения для повышения эффективности (другие подклассы могут использоваться для более сложных языков):
- Если указано специальное правило сортировки, управляемое <модификатором>, оно применяется ко всему объекту сортировщика.
- Все не указанные символы находятся в конце порядка сортировки.
Таблица сортировки состоит из списка правил сортировки, где каждое правило имеет одну из трех форм:
<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);
- См. также:
-
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(CharacterIterator source) Возвращает CollationElementIterator для данного CharacterIterator. |
CollationElementIterator |
getCollationElementIterator(String source) Возвращает CollationElementIterator для данной строки. |
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
comparing, comparing, comparingDouble, comparingInt, comparingLong, naturalOrder, nullsFirst, nullsLast, reversed, reverseOrder, 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.