java.text.Collat​​or 将 "v"和 "w"视为瑞典语/区域设置的相同字母

标签 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);

这在 vbbb 之前命令 waaa,在 wbbb 之前命令 vaaa。显然它将 vw 视为同一个字母。

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

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.

有没有人对此有通用的解决方法,以便 vw 在瑞典语言环境中被视为单独的字母?

最佳答案

创建您自己的 RuleBasedCollator .

检查返回字符串的值

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

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

并且可能还提交一份 JDK 错误报告,以备不时之需。

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

相关文章:

java - 将 Codename One 项目更新到 JDK 8 导致编译错误

java - 如何在 Android API <24 中将对象包装在 lambda 中

java - 如何使用 java 8 流从 HashMap 中获取值

java - 使用 Java 8 的更好方法

Java 8 Stream API 收集器问题

java - 尝试使用 Java 中的可执行文件运行文件

java - 从文件中读取 - Java

Java 检测窗口中任意位置的鼠标点击在某些区域不起作用

java.lang.UnsupportedClassVersionError 即使 java -version 和 javac -version 相同

java - 如何将 arraylist 中的字符串与数组的 char 类型进行比较