Java排序规则忽略了空间

jha*_*nbe 16 java collation

我最近意识到,Java Collat​​ion似乎忽略了空间.

我有以下术语列表:

Amman Jost 
Ammann Heinrich 
Ammanner Josef 
Bär Walter 
Bare Werner 
Barr Burt 
Barraud Maurice
Run Code Online (Sandbox Code Playgroud)

上面的订单反映了德国的所需订单,即占用空间.但是,Java Collat​​ion使用

Collator collator = Collator.getInstance(Locale.GERMANY);
Collections.sort(values, collator);
Run Code Online (Sandbox Code Playgroud)

给我以下顺序:

Amman Jost
Ammanner Josef
Ammann Heinrich
Bare Werner
Barraud Maurice
Barr Burt
Bär Walter
Run Code Online (Sandbox Code Playgroud)

上面的结果实际上并不是我所期望的,因为空间没有被考虑(看起来像这里描述的情况:维基百科字母顺序).

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

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

And*_*cer 9

您可以自定义排序规则.尝试查看源代码,了解如何构建德语语言环境的Collat​​or,如本答案中所述.

然后根据您的需求进行调整.本教程给出了一个起点.但是没有必要做所有的工作,其他人已经完成了它:看到这篇博文文章处理捷克语完全相同的问题.

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

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

这会在下划线规则之前为空格字符添加规则.

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