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

时间:2013-10-28 16:59:39

标签: java sorting hyphen

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

List<String> 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] - 预期的排序顺序

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

以下是API的引用。

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

  

规则要素的定义如下:

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

http://docs.oracle.com/javase/7/docs/api/java/text/RuleBasedCollator.html#compare(java.lang.String,java.lang.String)