【发布时间】:2011-11-29 19:38:43
【问题描述】:
我有这个代码。它在法语和俄语中正确排序。我使用了 Locale.US,它似乎是正确的。这个解决方案适用于所有语言吗?它适用于其他语言吗?例如:中文、韩文、日文……如果不是,有什么更好的解决方案?
public class CollationTest {
public static void main(final String[] args) {
final Collator collator = Collator.getInstance(Locale.US);
final SortedSet<String> set = new TreeSet<String>(collator);
set.add("abîmer");
set.add("abîmé");
set.add("aberrer");
set.add("abhorrer");
set.add("aberrance");
set.add("abécédaire");
set.add("abducteur");
set.add("abdomen");
set.add("государственно-монополистический");
set.add("гостить");
set.add("гостевой");
set.add("гостеприимный");
set.add("госпожа");
set.add("госплан");
set.add("господи");
set.add("господа");
for(final String s : set) {
System.out.println(s);
}
}
}
更新: 抱歉,我不要求此集必须按顺序包含所有语言。我的意思是这个集合包含一种语言并在每种语言中正确排序。
public class CollationTest {
public static void main(final String[] args) {
final Collator collator = Collator.getInstance(Locale.US);
final SortedSet<String> set = new TreeSet<String>(collator);
// Sorting in French.
set.clear();
set.add("abîmer");
set.add("abîmé");
set.add("aberrer");
set.add("abhorrer");
set.add("aberrance");
set.add("abécédaire");
set.add("abducteur");
set.add("abdomen");
for(final String s : set) {
System.out.println(s);
}
// Sorting in Russian.
set.clear();
set.add("государственно-монополистический");
set.add("гостить");
set.add("гостевой");
set.add("гостеприимный");
set.add("госпожа");
set.add("госплан");
set.add("господи");
set.add("господа");
for(final String s : set) {
System.out.println(s);
}
}
}
【问题讨论】:
-
我认为您无法有意义地定义跨语言单词的顺序。
-
即使该集合仅包含一种语言,您仍需要在每次排序时为
Collator选择正确的Locale。 -
英语将字母的所有变体排序在该字母下,因此 Ä 和 Å 被视为 A。但在瑞典语中,Ä 和 Å 是在 Z 之后找到的唯一字母。
-
提醒,并非所有的“亚洲语言”都是相同的。例如,韩语使用字母表(如英语)并具有明确的排序顺序。
标签: java collation string-comparison