3
4

2 回答 2

3

Java 6 或 7 中没有 Collat​​or 可以按照与第一个样本相同的顺序对中文进行排序。

public static void main(String... args) {
    String text1 = "啊<波<词<的<俄<佛<歌<和<及<课<了<馍<呢<票<气<日<四<特<瓦<喜<以<只";
    findLocaleForSortedOrder(text1);
    String text2 = "啊<波<词<的<俄<佛<歌<和<及<课<了<呢<票<气<日<四<特<瓦<喜<以<只<馍";
    findLocaleForSortedOrder(text2);
}

private static void findLocaleForSortedOrder(String text) {
    System.out.println("For " + text + " found...");
    String[] preSorted = text.split("<");
    for (Locale locale : Collator.getAvailableLocales()) {
        String[] sorted = preSorted.clone();
        Arrays.sort(sorted, Collator.getInstance(locale));
        if (Arrays.equals(preSorted, sorted))
            System.out.println("Locale " + locale + " has the same sorted order");
    }
    System.out.println();
}

印刷

For 啊&lt;波&lt;词&lt;的&lt;俄&lt;佛&lt;歌&lt;和&lt;及&lt;课&lt;了&lt;馍&lt;呢&lt;票&lt;气&lt;日&lt;四&lt;特&lt;瓦&lt;喜&lt;以&lt;只 found...

For 啊&lt;波&lt;词&lt;的&lt;俄&lt;佛&lt;歌&lt;和&lt;及&lt;课&lt;了&lt;呢&lt;票&lt;气&lt;日&lt;四&lt;特&lt;瓦&lt;喜&lt;以&lt;只&lt;馍 found...
Locale zh_CN has the same sorted order
Locale zh has the same sorted order
Locale zh_SG has the same sorted order
于 2012-11-08T09:30:43.177 回答
3

为什么不一样?因为有几种不同的方法可以对表意字符甚至整个单词进行排序。让我印象深刻的是:

  • 按笔画数
  • 通过使用拉丁音译然后“自然”排序(当然根据中文的特定规则)

还有其他方法,例如Unicode Technical Report #35提到了其中的一些方法(更多的是巧合,不是故意的),但您必须有足够的时间来完成它。

要回答您的问题,为什么这些排序顺序不同,这仅仅是因为 Java 包含自己的排序规则并且它不依赖于操作系统的规则(如 Excel 那样)。这些规则可能不同。您可能还想尝试ICU,它是 Java 中类和规则的来源(通常比 JDK 领先一步)。

于 2012-11-08T20:15:40.790 回答