以下测试在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之前。显然,它将vw视为同一字母。

实际上,根据Wikipedia所说,瑞典语是:



有人对此有一个通用的解决方法,以便在瑞典语区域设置中将vw视为单独的字母?

最佳答案

创建自己的RuleBasedCollator

检查返回的字符串的值

((RuleBasedCollator)Collator.getInstance(new Locale("sv", "SE"))).getRules()

并对其进行修改以适合您的需求,然后使用修改后的规则创建一个新的整理器。

并且可能也提交了一个JDK错误报告,这是很好的措施。

关于java.text.Collat​​or将 "v"和 "w"视为瑞典语/语言环境的相同字母,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54789366/

10-09 04:51