以下测试在 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);
这在 vbbb
之前命令 waaa
,在 wbbb
之前命令 vaaa
。显然它将 v
和 w
视为同一个字母。
事实上,根据维基百科,瑞典语:
By 2006, 'W' had grown in usage because of new loanwords, so 'W' officially became a letter, and the 'V' = 'W' sorting rule was deprecated. Pre-2006 books and software generally use the rule. After the rule was deprecated, some books and software continued to apply it.
有没有人对此有通用的解决方法,以便 v
和 w
在瑞典语言环境中被视为单独的字母?
最佳答案
创建您自己的 RuleBasedCollator .
检查返回字符串的值
((RuleBasedCollator)Collator.getInstance(new Locale("sv", "SE"))).getRules()
并修改它以满足您的需要,然后使用您修改后的规则创建一个新的整理器。
并且可能还提交一份 JDK 错误报告,以备不时之需。
关于java.text.Collator 将 "v"和 "w"视为瑞典语/区域设置的相同字母,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54789366/