java.text.Collat​​or将"v"和"w"视为瑞典语/语言环境的相同字母

Mat*_*eva 9 java java-8

以下测试正确使用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之前vbbbvaaa之前wbbb.显然它对待vw作为同一封信.

事实上,根据维基百科,用瑞典语:

到2006年,'W'因使用新的借词而在使用方面有所增长,因此'W'正式成为一封信,并且'V'='W'排序规则已被弃用.2006年以前的书籍和软件通常使用该规则.该规则被弃用后,一些书籍和软件继续应用它.

有没有人有这个一般的解决办法,使vw被视为瑞典区域内独立的信吗?

Dod*_*ion 4

创建您自己的RuleBasedCollat​​or

检查返回的字符串的值

((RuleBasedCollator)Collator.getInstance(new Locale("sv", "SE"))).getRules()
Run Code Online (Sandbox Code Playgroud)

并修改它以满足您的需要,然后使用修改后的规则创建一个新的整理器。

并且可能还提交一份 JDK 错误报告,以作为良好的衡量标准。