Java排序规则忽略空格

标签 java collation

我最近意识到,Java 排序规则似乎忽略了空格。

我有以下术语的列表:

Amman Jost 
Ammann Heinrich 
Ammanner Josef 
Bär Walter 
Bare Werner 
Barr Burt 
Barraud Maurice

上面的顺序反射(reflect)了德国所需的顺序,即考虑到空间。 然而,Java Collat​​ion 使用

Collator collator = Collator.getInstance(Locale.GERMANY);
Collections.sort(values, collator);

给我以下命令:

Amman Jost
Ammanner Josef
Ammann Heinrich
Bare Werner
Barraud Maurice
Barr Burt
Bär Walter

上面的结果实际上不是我所期望的,因为没有考虑空格(看起来像这里描述的情况:Wikipedia Alphabetical order)。

这是否意味着 Java Collat​​ion 不适用于此类用例,或者我在这里做错了什么?有没有办法让 Java Collat​​ion 空间感知?

我很乐意提出任何意见或建议。

最佳答案

您可以自定义排序规则。尝试查看源代码以了解德语语言环境的整理器是如何构建的,如 this answer 中所述。 .

然后根据您的需要进行调整。 tutorial给出了一个起点。但是不需要做所有的工作,其他人已经完成了:看这个 blog post dealing with the exact same problem for Czech .

上面链接的解决方案的本质是:

String rules = ((RuleBasedCollator) Collator.getInstance(Locale.GERMANY)).getRules();
RuleBasedCollator correctedCollator 
    = new RuleBasedCollator(rules.replaceAll("<'\u005f'", "<' '<'\u005f'"));

这会在下划线规则之前添加一个空格字符规则。

我承认我没有亲自测试过。

关于Java排序规则忽略空格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16567287/

相关文章:

java - 尝试在 androidmanifest 中声明类

java - 如何在android后台运行24x7服务来获取用户位置

java - 有人可以解释 Math.ulp(double) 方法吗?

java - Moskito 集成不能作为非 Maven 项目的一部分工作

mysql - 如何使用 utf8_unicode_ci 处理区分大小写的列

database - Firebird 数据库无法识别 unicode/西里尔字母

java - 如何从 Android 广播到其他 Java 类?

SQL Server - 是否有为数字提供自然顺序的排序规则?

MySQL - 最佳排序规则?

java - 在Java中对阿拉伯语单词进行排序