- 所有已实现的接口:
-
Cloneable
,Comparator<Object>
RuleBasedCollator
类是Collator
的具体子类,提供了一个简单的、数据驱动的表排序器。使用这个类,您可以创建一个定制的基于表的Collator
。 RuleBasedCollator
将字符映射到排序键。
RuleBasedCollator
为了效率有以下限制(其他子类可用于更复杂的语言):
- 如果指定了由<modifier>控制的特殊排序规则,则适用于整个排序器对象。
- 所有未提及的字符都位于排序顺序的末尾。
排序表由一系列排序规则组成,其中每个规则有三种形式之一:
<modifier> <relation> <text-argument> <reset> <text-argument>规则元素的定义如下:
- Text-Argument: 文本参数是任何字符序列,不包括特殊字符(即,常见的空白字符[0009-000D, 0020]和规则语法字符[0021-002F, 003A-0040, 005B-0060, 007B-007E])。如果需要这些字符,可以将它们放在单引号中(例如,ampersand => '&')。请注意,未引用的空格字符将被忽略;例如,
b c
将被视为bc
。 - Modifier: 目前有两个修饰符,用于启用特殊的排序规则。
- '@':启用重音的反向排序(次要差异),如法语。
- '!':启用泰语/老挝语元音-辅音交换。如果此规则在泰语元音范围\U0E40-\U0E44之前的泰语辅音范围\U0E01-\U0E2E或老挝语元音范围\U0EC0-\U0EC4之前的老挝语辅音范围\U0E81-\U0EAE时生效,则为了排序目的,元音将放在辅音之后。
'@':表示重音按照反向排序,如法语。
- Relation: 关系如下:
- '<':大于,作为字母差异(主要)
- ';':大于,作为重音差异(次要)
- ',':大于,作为大小写差异(三级)
- '=':相等
- Reset: 有一个单一的重置,主要用于缩略词和扩展,但也可用于在一组规则的末尾添加修改。
'&':表示下一个规则遵循重置文本参数将被排序的位置。
请注意,顺序很重要,因为随后的项目紧跟在文本参数后面。以下不是等效的: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-umlaut被视为扩展为两个字符(表示为“a,A < b,B ... &ae;\u00e3&AE;\u00c3”)。 [\u00e3和\u00c3当然是a-umlaut的转义序列。]a < b & a < c a < c & 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” + // 拉丁字母ae & AE “< \u00F8, \u00D8” + // 拉丁字母o & O带划线 “< \u00E5 = a\u030A,” + // 拉丁字母带上环的a “ \u00C5 = A\u030A;” + // 拉丁字母带上环的A “ aa, AA”
RuleBasedCollator
对象,您可以使用包含在
String
对象中的规则构造
RuleBasedCollator
。例如:
或: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” + “< 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” + // 拉丁字母ae & AE “< \u00F8, \u00D8” + // 拉丁字母o & O带划线 “< \u00E5 = a\u030A,” + // 拉丁字母带上环的a “ \u00C5 = A\u030A;” + // 拉丁字母带上环的A “ aa, AA”; RuleBasedCollator myNorwegian = new RuleBasedCollator(Norwegian);
getRules()
返回的规则可以连接以组合多个
RuleBasedCollator
。
// 旧规则 String oldRules = “=\u0301;\u0300;\u0302;\u0308” // 主要重音 + “;\u0327;\u0303;\u0304;\u0305” // 主要重音 + “;\u0306;\u0307;\u0309;\u030A” // 主要重音 + “;\u030B;\u030C;\u030D;\u030E” // 主要重音 + “;\u030F;\u0310;\u0311;\u0312” // 主要重音 + “< a , A ; ae, AE ; \u00e6 , \u00c6” + “< b , B < c, C < e, E & C < d, D”; // 更改重音字符的顺序 String addOn = “& \u0300 ; \u0308 ; \u0302”; RuleBasedCollator myCollator = new RuleBasedCollator(oldRules + addOn);
- 自版本:
- 1.1
- 参见:
-
Field Summary
Fields declared in class java.text.Collator
CANONICAL_DECOMPOSITION, FULL_DECOMPOSITION, IDENTICAL, NO_DECOMPOSITION, PRIMARY, SECONDARY, TERTIARY
-
Constructor Summary
-
Method Summary
Modifier and TypeMethodDescriptionclone()
标准覆盖;语义无变化。int
根据排序规则,比较存储在两个不同字符串中的字符数据。boolean
比较两个排序对象的相等性。getCollationElementIterator
(String source) 返回给定字符串的CollationElementIterator。返回给定CharacterIterator的CollationElementIterator。getCollationKey
(String source) 将字符串转换为一系列字符,可与CollationKey.compareTo进行比较。getRules()
获取排序对象的基于表的规则。int
hashCode()
为基于表的排序对象生成哈希码Methods declared in class java.text.Collator
compare, equals, getAvailableLocales, getDecomposition, getInstance, getInstance, getStrength, setDecomposition, setStrength
Methods declared in class java.lang.Object
finalize, getClass, notify, notifyAll, toString, wait, wait, wait
Methods declared in interface java.util.Comparator
reversed, thenComparing, thenComparing, thenComparing, thenComparingDouble, thenComparingInt, thenComparingLong
-
Constructor Details
-
RuleBasedCollator
RuleBasedCollator构造函数。这将使用表规则构建排序表。有关排序规则语法的更多详细信息,请参阅RuleBasedCollator类描述。- 参数:
-
rules
- 从中构建排序表的排序规则。 - 抛出:
-
ParseException
- 如果规则构建过程失败,将抛出格式异常。例如,构建规则“a < ? < d”将导致构造函数抛出ParseException,因为“?”未被引用。 - 参见:
-
-
Method Details
-
getRules
获取排序对象的基于表的规则。- 返回:
- 返回创建表排序对象的排序规则。
-
getCollationElementIterator
返回给定字符串的CollationElementIterator。- 参数:
-
source
- 要排序的字符串 - 返回:
-
一个
CollationElementIterator
对象 - 参见:
-
getCollationElementIterator
返回给定CharacterIterator的CollationElementIterator。- 参数:
-
source
- 要进行排序的字符迭代器 - 返回:
-
一个
CollationElementIterator
对象 - 自:
- 1.2
- 参见:
-
compare
根据排序规则比较两个不同字符串中存储的字符数据。返回关于一个字符串在语言中是小于、大于还是等于另一个字符串的信息。这可以在子类中被重写。- 指定者:
-
compare
在类Collator
- 参数:
-
source
- 源字符串。 -
target
- 目标字符串。 - 返回:
- 返回一个整数值。如果 source 小于 target,则值小于零,如果 source 和 target 相等,则值为零,如果 source 大于 target,则值大于零。
- 抛出:
-
NullPointerException
- 如果source
或target
为 null。 - 参见:
-
getCollationKey
将字符串转换为一系列字符,可以与 CollationKey.compareTo 进行比较。这会覆盖 java.text.Collator.getCollationKey。可以在子类中被重写。- 指定者:
-
getCollationKey
在类Collator
- 参数:
-
source
- 要转换为排序键的字符串。 - 返回:
- 基于此 Collator 的排序规则为给定字符串生成的 CollationKey。如果源字符串为 null,则返回 null CollationKey。
- 参见:
-
clone
标准覆盖;语义无变化。 -
equals
比较两个排序对象的相等性。- 指定者:
-
equals
在接口Comparator<Object>
- 覆盖:
-
equals
在类Collator
- 参数:
-
obj
- 要与此进行比较的基于表的排序对象。 - 返回:
- 如果当前基于表的排序对象与基于表的排序对象 obj 相同,则返回 true;否则返回 false。
- 参见:
-
hashCode
public int hashCode()为基于表的排序对象生成哈希码。
-