java.lang.Object
|
+----java.text.Collator
|
+----java.text.RuleBasedCollator
类 RuleBasedCollator 是 Collator 的具体子类,Collator 提供了一个简单的数据驱动的表整理程序。 使用该类可以创建一个定制的基于表的 Collator。
RuleBasedCollator 将字符映射为分类关键字。
为了提高效率,RuleBasedCollator 具有下列限制 ( 其它子类可能用于更复杂的语言中 ):
0xE800-0xF8FF。
整理表由一系列整理规则组成,每条规则是下列三种格式之一:
下面说明如何创建自己的整理规则:b c 被作为 bc。
'@' : 指示音调符号按倒序排序,象法语中那样。
'&' :指示复位 text-argument 将被排序的位置的下一条规则。
这听起来比实际运用复杂的多。例如下列是表达同一件事的等价的方式:
注意顺序是重要的,因为随后的项目直接出现在 text-augument 之后。下面的格式是不等价的:a
text-argument 必须已经出现在序列中,或者 text-augument 的一些初始的子串出现在序列中。( 例如 "a 可忽略的字符a
对于可忽略的字符,第一条规则必须以一个关系开始 ( 上面所使用的例子实际上是一些片段;"a 标准化和语音符号
Collator 自动的在内部将文本标准化,在可能的地方按照基本的字符划分音节。当处理规则和比较两个字符串时完成这项工作。Collator
也使用 Unicode 规范映射保证组合序列被正确排序。
错误
以下为错误:
RuleBasedCollator 抛出一个
ParseException。
示例
简单的: "挪威语: "
通常,为了创建一个基于规则的整理设备,使用
组合
另一个更有趣的例子将改变现有的表,创建一个新的
下面的例子说明了如何改变非空格语音符号的顺序:
最后的例子显示了如何把新的第一级顺序放在缺省设定之前。例如,在日语
Collator 的
工厂方法 getInstance。
但是,为了用指定的符合需求的规则创建一个基于规则的 Collator 对象,用包含在 String 对象中的规则构造
RuleBasedCollator。例如:
或者:
String Simple = "
String Norwegian = "
Collator 同组合字符串一样简单。
下面的例子将两个位于不同位置的 Collator 组合起来:
// Create an en_US Collator object
RuleBasedCollator en_USCollator = (RuleBasedCollator)
Collator.getInstance(new Locale("en", "US", ""));
// Create a da_DK Collator object
RuleBasedCollator da_DKCollator = (RuleBasedCollator)
Collator.getInstance(new Locale("da", "DK", ""));
// Combine the two
// First, get the collation rules from en_USCollator
String en_USRules = en_USCollator.getRules();
// Second, get the collation rules from da_DKCollator
String da_DKRules = da_DKCollator.getRules();
RuleBasedCollator newCollator =
new RuleBasedCollator(en_USRules + da_DKRules);
// newCollator has the combined rules
Collator
对象。例如将 "& C
// Create a new Collator object with additional rules
String addRules = "& C
// old rule
String oldRules = "=?;?;?;?" // main accents
+ ";?;?;?;?" // main accents
+ ";?;?;?;?" // main accents
+ ";?;?;?;?" // main accents
+ ";?;?;?;?" // main accents
+ "
Collator 中,可以把英文字符排在日文字符之前或之后:
// get en_US Collator rules
RuleBasedCollator en_USCollator = (RuleBasedCollator)Collator.getInstance(Locale.US);
// add a few Japanese character to sort before English characters
// suppose the last character before the first base letter 'a' in
// the English collation rule is ?
String jaString = "& ? , ? < ?, ?"; rulebasedcollator myjapanesecollator="new" rulebasedcollator(en_uscollator.getrules() + jastring);
构造子索引
方法索引
构造子
RuleBasedCollator
public RuleBasedCollator(String rules) throws ParseException
方法
getRules
public String getRules()
name="getCollationElementIterator(java.lang.String)">
public CollationElementIterator getCollationElementIterator(String source)
public int compare(String source, String target)getCollationKey
public CollationKey getCollationKey(String source)
public Object clone()equals
public boolean equals(Object obj)
public int hashCode()