以下测试在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);
这将
waaa
排序在vbbb
之前,将vaaa
排序在wbbb
之前。显然,它将v
和w
视为同一字母。实际上,根据Wikipedia所说,瑞典语是:
有人对此有一个通用的解决方法,以便在瑞典语区域设置中将
v
和w
视为单独的字母? 最佳答案
创建自己的RuleBasedCollator。
检查返回的字符串的值
((RuleBasedCollator)Collator.getInstance(new Locale("sv", "SE"))).getRules()
并对其进行修改以适合您的需求,然后使用修改后的规则创建一个新的整理器。
并且可能也提交了一个JDK错误报告,这是很好的措施。
关于java.text.Collator将 "v"和 "w"视为瑞典语/语言环境的相同字母,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54789366/