gpt4 book ai didi

java - 有没有办法对所有语言的字符串进行排序?

转载 作者:搜寻专家 更新时间:2023-10-30 20:58:39 26 4
gpt4 key购买 nike

我有这个代码。它在法语和俄语中正确排序。我用了 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);
}
}
}

最佳答案

因为每种语言都有自己的字母顺序,所以您不能。例如,

如您所述,俄语中 с 字母的顺序与土耳其语不同。

您应该始终使用 collat​​or。我可以建议您使用我们的 Collection API。

    //
// Define a collator for German language
//
Collator collator = Collator.getInstance(Locale.GERMAN);

//
// Sort the list using Collator
//
Collections.sort(words, collator);

如需了解更多信息,请按说明查看here

这个程序展示了当你用两个不同的整理器对同一个单词列表进行排序时会发生什么:

整理器 fr_FRCollat​​or = Collat​​or.getInstance(new Locale("fr","FR"));

Collat​​or en_USCollat​​or = Collat​​or.getInstance(new Locale("en","US"));

排序方法称为 sortStrings,可与任何 Collat​​or 一起使用。请注意,sortStrings 方法调用了比较方法:

 public static void sortStrings(Collator collator, 
String[] words) {
String tmp;
for (int i = 0; i < words.length; i++) {
for (int j = i + 1; j < words.length; j++) {
if (collator.compare(words[i], words[j]) > 0) {
tmp = words[i];
words[i] = words[j];
words[j] = tmp;
}
}
}
}

The English Collat​​or 将单词排序如下:

桃子佩奇佩奇罪恶

根据法语的排序规则,上述列表的顺序是错误的。在法语中,péché 应该在排序列表中跟在 pêche 之后。 French Collat​​or 正确排序单词数组,如下所示:

桃子佩奇佩奇罪恶

关于java - 有没有办法对所有语言的字符串进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7633552/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com