Collator 类实现了 Comparator 接口,Locale 敏感,可以设置不同语言的排序
Collator coll = Collator.getInstance(Locale.US);
1 字符差别强度
排序器有字符差别强度设置:
- Collator.PRIMARY:首要的
- Collator.SECONDARY:其次的
- Collator.TERTIARY:再次的
- Collator.IDENTICAL:不允许任何差异
例如,英语中A
和Z
的差别是首要的,A``Å
的差别是其次的,A
和a
的差别是再次的。
Collator coll = Collator.getInstance();
coll.setStrength(Collator.PRIMARY);
word.sort(coll);
2 分解模式
一个字符在描述成 Unicode 时,可能有多种方式,如Å
可以是 Unicode 字符 U+00C5,或分解为A
(U+0065)和上方组合环̊
(U+030A)。
对此,Unicode对字符串定义了四种范化形式:D、KD、C和KC。
- 范化形式 C:重音符号组合
Å
- 范化形式 D:重音字符分解为基字符和组合重音符
A°
- 范化形式 KC:完全分解字符
™
=TM
- 范化形式 KD:分解字符
Collator 可以选择范化程度
- Collator.NO_DECOMPOSITION:不分解
- Collator.CANONICAL_DECOMPOSITION:规范分解,默认值
- Collator.FULL_DECOMPOSITION:完全分解
Normalizer 实现了对范化的处理
String name = "ÅBC";
String normalized = Normalizer.normalize(name, Normalize.Form.NFD);//"A°BC"