# 执行与区域无关的比较

> 原文： [https://docs.oracle.com/javase/tutorial/i18n/text/locale.html](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`](examples/CollatorDemo.java) 的示例程序使用`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

```