使用Java Collat​​or的区分大小写的顺序

我正在尝试使用Java Collat​​or来了解区分大小写的顺序应该如何工作。

在这个例子中,下面的字符串使用所有强度在法语语言环境中进行排序(为了说明的目的,我在数据集中添加了一些额外的字符串):

[Äbc, äbc, Àbc, àbc, Abc, abc, ABC] - Original Data
[Äbc, äbc, Àbc, àbc, Abc, abc, ABC] Primary
[Abc, abc, ABC, Àbc, àbc, Äbc, äbc] Secondary
[abc, Abc, ABC, àbc, Àbc, äbc, Äbc] Tertiary

Case kicks in only with Tertiary Collation Strength  : 
[CACHE, cache, Cache, da, DA, Da] - Original Data
[CACHE, cache, Cache, da, DA, Da] Primary
[CACHE, cache, Cache, da, DA, Da] Secondary
[cache, Cache, CACHE, da, Da, DA] Tertiary

但我真正期待的结果是:

[abc, àbc, äbc, Abc, ABC, Àbc, Äbc] Tertiary
[cache, da, Cache, CACHE, Da, DA] Tertiary

换句话说,我希望所有的小写字母首先按字母顺序排列,然后是大写字母(反之亦然)。 这是不是一个合理的期望?


有趣的是,android javadoc比oracle更有用 - 特别是:

当字符串中的任何位置存在主要或次要区别时,第三个区别将被忽略。

另外值得注意的是:您获得的订单是您在法语区域中所期望的。 根据维基百科关于“ordrealphabétique”的文章:

Enpremièreanalyze,lescaractèresaccentués,demêmeque les majuscules,ont lemêmerangalphabétiqueque lecaractèrefondamental。
Si plusieurs mots ont lemêmerangalphabétique,on thetâchede distiner entre euxgrâceaux majuscules et aux accents(pour le e,on l'ordre e,é,è,ê,ë)

英文(我加斜体):

第一步是对信件进行排名,不管其重音或情况如何(即:a,A,à排名相同)。 如果几个单词在第一步之后具有相同的排名,则会考虑大小写和重音。

换句话说, c (小型帽)和D (大型帽)总是可以用主要力量排序,而第三方力量不会改变这个顺序。

因此,在您的示例中,无论大小写和口音如何,您都会在da之前拥有cache 。 如果主要字母相同(例如c (小)与C (大)),则情况只会有所不同。


示例代码正在按预期工作。 您可以使用自定义整理规则来获取所需的输出。

RuleBasedCollat​​or是JDK中Collat​​or的唯一子类。 您对Collat​​or.getInstance(Locale.FRANCE)的调用返回RuleBasedCollat​​or的一个实例

你可以使用创建你自己的实例

RuleBasedCollator myCollator = new RuleBasedCollator(rules);

规则的格式在javadoc中给出。

希望能帮助到你。


另一种选择:如果您需要自定义语言环境的规则,则可以尝试使用RuleBasedCollat​​or:

    RuleBasedCollator collTemp = (RuleBasedCollator) Collator.getInstance(Locale.US);

    String usRules = collTemp.getRules();

    //Remove dashes rule from US locale (dashes come after letters)
    usRules = usRules.replace(",'-'", "");

    //Create a collator with customized rules    
    RuleBasedCollator coll = new RuleBasedCollator(usRules);

    //Sort the collection based on collator
    Collections.sort(lines, coll);
链接地址: http://www.djcxy.com/p/74305.html

上一篇: Case sensitive order using Java Collator

下一篇: How to chop a text adding three dots "..."?