Java不区分大小写的本地化排序

我有一组带连字符的字符串集。 考虑到语言环境,我想排序。

List words = Arrays.asList("App - Small", "Apple", "App - Big"); Collator collator = Collator.getInstance(new Locale("en")); // Sort Method 1 Collections.sort(words, String.CASE_INSENSITIVE_ORDER); System.out.println(words.toString()); // Sort Method 2 collator.setStrength(Collator.PRIMARY); Collections.sort(words, collator); System.out.println(words.toString()); 

结果

 String.CASE_INSENSITIVE_ORDER [App - Big, App - Small, Apple] Collator.PRIMARY [App - Big, Apple, App - Small] 

虽然Collat​​or.PRIMARY应该进行不区分大小写的排序,但使用上述两种方法的顺序之间存在差异。 如何实现与连字符一起使用的基于区域设置的不区分大小写的排序顺序。

[App – Big,App – Small,Apple] – 预期的排序顺序

以下是API的引用。

它不仅取决于力量,还取决于其他因素。 在单引号之间包含连字符(’ – ‘),您将获得所需的输出”

规则要素的定义如下:

  • 文本参数:文本参数是任何字符序列,不包括特殊字符(即常见的空白字符[0009-000D,0020]和规则语法字符[0021-002F,003A-0040,005B-0060,007B- 007E])。 如果需要这些字符,可以将它们放在单引号中(例如,ampersand =>’&’)。 请注意,忽略不带引号的空格字符; 例如,bc被视为bc。

http://docs.oracle.com/javase/7/docs/api/java/text/RuleBasedCollat​​or.html#compare(java.lang.String,java.lang.String

不涉及案例敏感问题。 整理器忽略空格和连字符,因为所有字符串都以“App”开头,示例中的重要字母为“ S ”,“ l ”和“ B ”,结果顺序为“ B ”“ L ”“ S ”为正确。