文档

Java™ 教程-Java Tutorials 中文版
执行与语言环境无关的比较
Trail: Internationalization
Lesson: Working with Text
Section: Comparing Strings

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

排序规则定义字符串的排序顺序。这些规则因语言环境而异,因为各种自然语言对单词的排序方式不同。你可以使用 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 方法对英语和法语单词数组进行排序。此程序显示当你使用两个不同的 collat​​ors 对相同的单词列表进行排序时会发生什么:

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

根据法语的排序规则,前面的列表顺序错误。在法语中,péché 应该在排序列表中跟在 pêche 后面。法语 Collator 正确排序单词数组,如下所示:

peach
pêche
péché
sin

Previous page: Comparing Strings
Next page: Customizing Collation Rules