文档

Java™ 教程
隐藏目录
执行与区域设置无关的比较
路径:国际化
课程:处理文本
章节:比较字符串

执行与区域设置无关的比较

排序规则定义了字符串的排序顺序。这些规则因地区而异,因为不同的自然语言对单词的排序方式不同。您可以使用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方法对英语和法语单词的数组进行排序。此程序演示了使用两个不同的排序器对相同的单词列表进行排序时可能发生的情况:

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

上一页: 比较字符串
下一页: 自定义排序规则