执行与语言环境无关的比较

排序规则定义字符串 的排序 Sequences。这些规则因地区而异,因为各种自然语言对单词的排序方式不同。您可以使用Collator类提供的 预定义归类规则,以与语言环境无关的方式对字符串 进行排序。

要实例化Collator类,请调用getInstance方法。通常,您为默认的Locale创建一个Collator,如以下示例所示:

Collator myDefaultCollator = Collator.getInstance();

您还可以在创建Collator时指定特定的Locale,如下所示:

Collator myFrenchCollator = Collator.getInstance(Locale.FRENCH);

getInstance方法返回RuleBasedCollator,它是Collator的具体子类。 RuleBasedCollator包含一组规则,这些规则确定您指定的语言环境的字符串 的排序 Sequences。这些规则是针对每个区域设置的。由于规则封装在RuleBasedCollator内,因此您的程序将不需要特殊的例程来处理排序规则随语言而变化的方式。

您调用Collator.compare方法以执行与语言环境无关的字符串 比较。当第一个字符串 参数小于,等于或大于第二个字符串 参数时,compare方法返回一个小于,等于或大于零的整数。下表包含对Collator.compare的一些示例调用:

ExampleReturn ValueExplanation
myCollator.compare("abc", "def")-1"abc"小于“ def”
myCollator.compare("rtf", "rtf")0两个字符串 相等
myCollator.compare("xyz", "abc")1“ xyz”大于“ abc”

执行排序操作时,请使用compare方法。名为CollatorDemo的示例程序使用compare方法对英语和法语单词数组进行排序。该程序显示了使用两个不同的排序规则对相同的单词列表进行排序时会发生什么:

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对单词的排序如下:

peach
péché
pêche
sin

根据法语的排序规则,以上列表的 Sequences 错误。在法语中,péché应该在排序列表中跟随 pêche。法语Collator正确地对单词数组进行了排序,如下所示:

peach
pêche
péché
sin