以下测试正确使用Java 8.
Comparator<String> stringComparator = Collator.getInstance(new Locale("sv", "SE"));
Assert.assertTrue(stringComparator.compare("aaaa", "bbbb") < 0);
Assert.assertTrue(stringComparator.compare("waaa", "vbbb") < 0);
Assert.assertTrue(stringComparator.compare("vaaa", "wbbb") < 0);
Run Code Online (Sandbox Code Playgroud)
这个订单waaa之前vbbb和vaaa之前wbbb.显然它对待v和w作为同一封信.
事实上,根据维基百科,用瑞典语:
到2006年,'W'因使用新的借词而在使用方面有所增长,因此'W'正式成为一封信,并且'V'='W'排序规则已被弃用.2006年以前的书籍和软件通常使用该规则.该规则被弃用后,一些书籍和软件继续应用它.
有没有人有这个一般的解决办法,使v和w被视为瑞典区域内独立的信吗?
创建您自己的RuleBasedCollator。
检查返回的字符串的值
((RuleBasedCollator)Collator.getInstance(new Locale("sv", "SE"))).getRules()
Run Code Online (Sandbox Code Playgroud)
并修改它以满足您的需要,然后使用修改后的规则创建一个新的整理器。
并且可能还提交一份 JDK 错误报告,以作为良好的衡量标准。