本教程是针对JDK 8编写的。本页面中描述的示例和实践不利用后续版本中引入的改进,并且可能使用不再可用的技术。
请参阅Java语言更改以获取Java SE 9及后续版本中更新的语言特性的摘要。
请参阅JDK发行说明以获取有关所有JDK版本的新功能、增强功能和已删除或已弃用选项的信息。
排序规则定义了字符串的排序顺序。这些规则因地区而异,因为不同的自然语言对单词的排序方式不同。您可以使用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