执行与区域无关的比较
原文: https://docs.oracle.com/javase/tutorial/i18n/text/locale.html
排序规则定义字符串的排序顺序。这些规则因语言环境而异,因为各种自然语言对单词的排序方式不同您可以使用Collator类提供的预定义排序规则以与语言环境无关的方式对字符串进行排序。
要实例化Collator类,请调用getInstance方法。通常,您为默认Locale创建Collator,如下例所示:
Collator myDefaultCollator = Collator.getInstance();
您还可以在创建Collator时指定特定的Locale,如下所示:
Collator myFrenchCollator = Collator.getInstance(Locale.FRENCH);
getInstance方法返回RuleBasedCollator,它是Collator的具体子类。 RuleBasedCollator包含一组规则,用于确定您指定的语言环境的字符串的排序顺序。这些规则是为每个区域设置预定义的。因为规则封装在RuleBasedCollator中,所以您的程序不需要特殊的例程来处理整理规则随语言变化的方式。
您调用Collator.compare方法来执行与语言环境无关的字符串比较。当第一个字符串参数小于,等于或大于第二个字符串参数时,compare方法返回小于,等于或大于零的整数。下表包含对Collator.compare的一些示例调用:
| 例 | 回报价值 | 说明 |
|---|---|---|
myCollator.compare("abc", "def") |
-1 |
"abc"小于“def” |
myCollator.compare("rtf", "rtf") |
0 |
这两个字符串相等 |
myCollator.compare("xyz", "abc") |
1 |
“xyz”大于“abc” |
执行排序操作时使用compare方法。名为 CollatorDemo 的示例程序使用compare方法对英语和法语单词数组进行排序。此程序显示当您使用两个不同的 collators 对相同的单词列表进行排序时会发生什么:
Collator fr_FRCollator = Collator.getInstance(new Locale("fr","FR"));Collator en_USCollator = Collator.getInstance(new Locale("en","US"));
分类方法称为sortStrings,可与任何Collator一起使用。请注意,sortStrings方法调用compare方法:
public static void sortStrings(Collator collator, String[] words) {String tmp;for (int i = 0; i < words.length; i++) {for (int j = i + 1; j < words.length; j++) {if (collator.compare(words[i], words[j]) > 0) {tmp = words[i];words[i] = words[j];words[j] = tmp;}}}}
英语Collator按如下方式对单词进行排序:
peachpéchépêchesin
根据法语的整理规则,前面的列表顺序错误。在法语中,péché应该在排序列表中跟随 pêche。法语Collator正确排序单词数组,如下所示:
peachpêchepéchésin
