- java.lang.Object
-
- java.text.Collator
-
- java.text.RuleBasedCollator
-
- All Implemented Interfaces:
-
Cloneable
,Comparator<Object>
public class RuleBasedCollator extends Collator
所述RuleBasedCollator
类是的具体子类Collator
,提供了一个简单的,数据驱动的表collator。 使用这个类可以创建一个自定义的基于表的Collator
。RuleBasedCollator
将字符映射到排序键。RuleBasedCollator
对效率有以下限制(其他子类可用于更复杂的语言):- 如果指定了由<modifier>控制的特殊排序规则,则它将应用于整个整理器对象。
- 所有未提及的字符都在排序规则顺序的末尾。
排序规则表由排序规则列表组成,其中每个规则是三种形式之一:
<modifier> <relation> <text-argument> <reset> <text-argument>
规则要素的定义如下:- 文本参数 :文本参数是任何字符序列,不包括特殊字符(即常见的空格字符[0009-000D,0020]和规则语法字符[0021-002F,003A-0040,005B-0060,007B- 007E])。 如果需要这些字符,您可以将它们放在单引号中(例如,&amp;&gt;'&')。 请注意,未引用的空白字符将被忽略; 例如
b c
被视为bc
。 - 修饰符 :目前有两个修改器启用特殊的排序规则。
- '@':开启反向排序口音(次要差异),如法文。
- '!' :打开泰国/老挝元音辅音交换。 如果这个规则是有效的,当范围为\ U0E401- \ U0E2E的范围为\ 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”应该是“<a <b”)。 但是,如果第一个关系不是“<”,则所有直到第一个“<”的文本参数都是可忽略的。 例如,“, - <a <b”使“ - ”成为一个可忽略的字符,正如我们前面在“黑鸟”一词中所看到的那样。 在不同语言的样本中,您会发现大多数口音都是可忽略的。
规范化和口音
RuleBasedCollator
自动处理其规则表以包括RuleBasedCollator
字符和组合字符版本的重音字符。 即使所提供的规则字符串仅包含基本字符和单独组合重音字符,则将在表中输入与规则字符串中的所有规范字符组合匹配的预先组合的重音字符。这使您可以使用RuleBasedCollator来比较重音字符串,即使将整理器设置为NO_DECOMPOSITION。 但是有两个注意事项。 首先,如果要整理的字符串包含可能不符合规范的组合序列,则应将归一化器设置为CANONICAL_DECOMPOSITION或FULL_DECOMPOSITION以启用对组合序列的排序。 第二,如果字符串包含具有兼容性分解的字符(例如全宽和半角形式),则必须使用FULL_DECOMPOSITION,因为规则表仅包括规范映射。
错误
以下是错误:
- 文本参数包含未引用的标点符号(例如“a <bc <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 <m,M <n,N <o,O <p,P <q,Q <r,R <s,S <t,T <u,U <v,V <w,W <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
s。以下示例演示如何更改非间距重音符的顺序,
// 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
-
-
Field Summary
-
Fields inherited from class java.text.Collator
CANONICAL_DECOMPOSITION, FULL_DECOMPOSITION, IDENTICAL, NO_DECOMPOSITION, PRIMARY, SECONDARY, TERTIARY
-
-
构造方法摘要
构造方法 Constructor 描述 RuleBasedCollator(String rules)
RuleBasedCollator构造函数。
-
方法摘要
所有方法 接口方法 具体的方法 Modifier and Type 方法 描述 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()
生成基于表的归类对象的哈希码-
Methods inherited from class java.text.Collator
compare, equals, getAvailableLocales, getDecomposition, getInstance, getInstance, getStrength, setDecomposition, setStrength
-
Methods inherited from interface 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)
返回给定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
- 目标字符串。 - 结果
- 返回一个整数值。 如果源小于目标值,则值小于零,如果源和目标相等,则值为零,如果源大于目标值,则值大于零。
- 异常
-
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,则返回一个空CollationKey。
- 另请参见:
-
CollationKey
,Collator.compare(java.lang.String, java.lang.String)
-
equals
public boolean equals(Object obj)
比较两个对照对象的相等性。- Specified by:
-
equals
在接口Comparator<Object>
- 重写:
-
equals
在Collator
- 参数
-
obj
- 要与之进行比较的基于表的归类对象。 - 结果
- 如果当前基于表的归类对象与基于表的归类对象obj相同,则为true; 否则为假。
- 另请参见:
-
Object.hashCode()
,HashMap
-
hashCode
public int hashCode()
生成基于表的归类对象的哈希码- Specified by:
-
hashCode
在Collator
- 结果
- 该对象的哈希码值。
- 另请参见:
-
Object.equals(java.lang.Object)
,System.identityHashCode(java.lang.Object)
-
-