【发布时间】:2013-09-16 15:36:39
【问题描述】:
我试图了解使用Java Collator 时区分大小写的顺序应该如何真正起作用。
在this example 中,以下字符串在法语语言环境中使用所有优势进行排序(出于说明目的,我在数据集中添加了一些额外的字符串):
[Äbc, äbc, Àbc, àbc, Abc, abc, ABC] - Original Data
[Äbc, äbc, Àbc, àbc, Abc, abc, ABC] Primary
[Abc, abc, ABC, Àbc, àbc, Äbc, äbc] Secondary
[abc, Abc, ABC, àbc, Àbc, äbc, Äbc] Tertiary
Case kicks in only with Tertiary Collation Strength :
[CACHE, cache, Cache, da, DA, Da] - Original Data
[CACHE, cache, Cache, da, DA, Da] Primary
[CACHE, cache, Cache, da, DA, Da] Secondary
[cache, Cache, CACHE, da, Da, DA] Tertiary
但我真正期待的结果是这样的:
[abc, àbc, äbc, Abc, ABC, Àbc, Äbc] Tertiary
[cache, da, Cache, CACHE, Da, DA] Tertiary
换句话说,我希望所有小写字母都在前面(按字母顺序排序),然后是大写字母(反之亦然)。这不是一个合理的期望吗?
【问题讨论】:
-
我不明白你的疑问。您希望 Collator 在设计上表现得与众不同,还是结果让您大吃一惊?
-
我想得到不同的结果,并且对我得到的任何结果感到惊讶。所以我的问题是——如果这是设计使然,如果是的话——如何实现我想要的?
-
well String compareTo 默认使用字典顺序。 docs.oracle.com/javase/6/docs/api/java/lang/…你想要不同的东西吗?
-
compareTo不是很有用,因为它不会在本地化上下文中对字符串进行排序,而是按照 Unicode 中定义的顺序进行排序。我需要在任意语言环境中订购文本。 -
如果您的语言环境包括真正的 ä 和变音符号,我会使用带有语言环境的 Collator 加上 FULL_DECOMPOSITION。不幸的是,我现在不能尝试,但我认为你会像这样实现你的目标。我将您的问题添加为书签,以便进行更精确的分析。
标签: java string sorting localization collation