【问题标题】:Java case insensitive localized orderingJava 不区分大小写的本地化排序
【发布时间】:2013-10-28 16:59:39
【问题描述】:

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

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

【问题讨论】:

  • 我正在使用 TreeMap,所以我最初是这么写的。编辑以将其从主题中删除。关于,我的应用程序的预期输出的排序顺序。

标签: java sorting hyphen


【解决方案1】:

不涉及区分大小写的问题。整理者忽略空格和连字符,因此,由于所有字符串都以“App”开头,因此在您的示例中,重要字母为“S”、“l”和“B”,结果顺序为“B” ” “L” “S” 是正确的。

【讨论】:

【解决方案2】:

以下是 API 的引用。

这不仅取决于实力,还取决于其他方面。将连字符('-')括在单引号之间,您将获得所需的输出''

规则元素定义如下:

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

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

【讨论】:

  • 感谢您的回复。
猜你喜欢
  • 1970-01-01
  • 2019-01-31
  • 2020-09-13
  • 2012-06-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-10
  • 1970-01-01
相关资源
最近更新 更多