- java.lang.Object
-
- java.text.Collator
-
- java.text.RuleBasedCollator
-
- 实现的所有接口
-
Cloneable
,Comparator<Object>
public class RuleBasedCollatorextends Collator
所述RuleBasedCollator
类是的具体子类Collator
,提供了一个简单的,数据驱动的表collator。 使用此类,您可以创建基于表的自定义Collator
。RuleBasedCollator
将字符映射到排序键。RuleBasedCollator
对效率有以下限制(其他子类可用于更复杂的语言):- 如果指定了由<modifier>控制的特殊排序规则,则它将应用于整个collator对象。
- 所有未提及的字符都在整理顺序的末尾。
排序规则表由排序规则列表组成,其中每个规则是以下三种形式之一:
<modifier> <relation> <text-argument> <reset> <text-argument>
规则要素的定义如下:- 文本参数 :文本参数是任何字符序列,不包括特殊字符(即常见的空白字符[0009-000D,0020]和规则语法字符[0021-002F,003A-0040,005B-0060,007B- 007E])。 如果需要这些字符,可以将它们放在单引号中(例如,ampersand =>'&')。 请注意,忽略不带引号的空格字符; 例如,
b c
被视为bc
。 - 修饰符 :目前有两个修饰符可以打开特殊的归类规则。
- '@':开启向后排序的重音(次要差异),如法语。
- '!' :打开泰语/老挝元音 - 辅音交换。 如果此规则在范围\ U0E40- \ U0E44的泰语元音位于范围\ U0E01- \ U0E2E的泰语辅音之前有效,或者范围为\ U0EC0- \ U0EC4的老挝元音先于该范围的老挝辅音\ U0E81- \ U0EAE然后将元音放在辅音后面以进行整理。
'@':表示重音按向后排序,如法语。
- 关系 :关系如下:
- '<':更大,作为字母差异(主要)
- ';' :更大,作为重音差异(次要)
- ',':更大,作为案例差异(第三级)
- '=':平等
- 重置 :有一次重置主要用于收缩和扩展,但也可用于在一组规则的末尾添加修改。
'&':表示下一个规则遵循重置text-argument将被排序的位置。
这听起来比在实践中更复杂。 例如,以下是表达同一事物的等效方式:
a < b < c a < b & b < c a < c & a < b
a < b & a < c a < c & a < b
可忽略的角色
对于可忽略的字符,第一个规则必须以关系开头(我们上面使用的例子实际上是片段;“a <b”确实应该是“<a <b”)。 但是,如果第一个关系不是“<”,那么直到第一个“<”的所有文本参数都是可忽略的。 例如,“, - <a <b”使“ - ”成为一个可忽略的角色,正如我们之前在“黑鸟”一词中看到的那样。 在不同语言的示例中,您会看到大多数重音都是可忽略的。
规范化和口音
RuleBasedCollator
自动处理其规则表以包括重音字符的预组合和组合字符版本。 即使提供的规则字符串仅包含基本字符和单独的组合重音字符,也会在表格中输入与规则字符串中所有字符的规范组合相匹配的预先组合的重音字符。这允许您使用RuleBasedCollator来比较重音字符串,即使将collator设置为NO_DECOMPOSITION也是如此。 然而,有两个警告。 首先,如果要整理的字符串包含可能不是规范顺序的组合序列,则应将collator设置为CANONICAL_DECOMPOSITION或FULL_DECOMPOSITION以启用组合序列的排序。 其次,如果字符串包含具有兼容性分解的字符(例如全宽和半宽形式),则必须使用FULL_DECOMPOSITION,因为规则表仅包括规范映射。
错误
以下是错误:
- text-argument包含不带引号的标点符号(例如“a <bc <d”)。
- 关系或重置字符后面没有文本参数(例如“a <,b”)。
- text-argument(或text-argument的初始子字符串)不在序列中的重置。 (例如“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)
返回给定String的CollationElementIterator。CollationElementIterator
getCollationElementIterator(CharacterIterator source)
返回给定CharacterIterator的CollationElementIterator。CollationKey
getCollationKey(String source)
将字符串转换为一系列可与CollationKey.compareTo进行比较的字符。String
getRules()
获取排序规则对象的基于表的规则。int
hashCode()
生成基于表的排序规则对象的哈希码-
声明方法的类 java.text.Collator
compare, equals, getAvailableLocales, getDecomposition, getInstance, getInstance, getStrength, setDecomposition, setStrength
-
声明方法的接口 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)
返回给定String的CollationElementIterator。- 参数
-
source
- 要整理的字符串 - 结果
- 一个
CollationElementIterator
对象 - 另请参见:
-
CollationElementIterator
-
getCollationElementIterator
public CollationElementIterator getCollationElementIterator(CharacterIterator source)
返回给定CharacterIterator的CollationElementIterator。- 参数
-
source
- 要整理的字符迭代器 - 结果
- 一个
CollationElementIterator
对象 - 从以下版本开始:
- 1.2
- 另请参见:
-
CollationElementIterator
-
compare
public int compare(String source, String target)
根据整理规则比较存储在两个不同字符串中的字符数据。 返回有关字符串是否小于,大于或等于语言中另一个字符串的信息。 这可以在子类中重写。- Specified by:
-
compare
在课程Collator
- 参数
-
source
- 源字符串。 -
target
- 目标字符串。 - 结果
- 返回一个整数值。 如果source小于target,则值小于零,如果source和target相等,则值为零,如果source大于target,则value大于零。
- 异常
-
NullPointerException
- 如果source
或target
为空。 - 另请参见:
-
CollationKey
,Collator.getCollationKey(java.lang.String)
-
getCollationKey
public CollationKey getCollationKey(String source)
将字符串转换为一系列可与CollationKey.compareTo进行比较的字符。 这会覆盖java.text.Collator.getCollationKey。 它可以在子类中重写。- Specified by:
-
getCollationKey
在课程Collator
- 参数
-
source
- 要转换为归类键的字符串。 - 结果
- 基于此Collator的排序规则的给定String的CollationKey。 如果源String为null,则返回null CollationKey。
- 另请参见:
-
CollationKey
,Collator.compare(java.lang.String, java.lang.String)
-
equals
public boolean equals(Object obj)
比较两个归类对象的相等性。- Specified by:
-
equals
in interfaceComparator<Object>
- 重写:
-
equals
在课程Collator
- 参数
-
obj
- 要与此进行比较的基于表的排序规则对象。 - 结果
- 如果当前基于表的排序规则对象与基于表的排序规则对象obj相同,则为true;否则为false。 否则是假的。
- 另请参见:
-
Object.hashCode()
,HashMap
-
hashCode
public int hashCode()
生成基于表的排序规则对象的哈希码- Specified by:
-
hashCode
在课程Collator
- 结果
- 此对象的哈希码值。
- 另请参见:
-
Object.equals(java.lang.Object)
,System.identityHashCode(java.lang.Object)
-
-