gpt4 book ai didi

java - Collat​​or 比较字符串很奇怪

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:18:12 24 4
gpt4 key购买 nike

我有一个字符串集合,需要对其进行排序。我正在使用整理器。但是输出很奇怪。

final Collator collator = Collator.getInstance(Locale.US);

List<String> data = new ArrayList<String>();

data.add("1Z5800701_AB");
data.add("1Z5800701_AC");
data.add("1Z5800701-A");
data.add("1Z5800701 A");
data.add("1Z5800701B");
data.add("1Z5800701A");
data.add("1Z5800701 - A");

Collections.sort(data, new Comparator<String>() {

@Override
public int compare(String o1, String o2) {
return collator.compare(o1, o2);
}
});

for (String s : data) {
System.out.println(s);
}

输出是:

1Z5800701_AB
1Z5800701_AC
1Z5800701A
1Z5800701 A
1Z5800701 - A
1Z5800701-A
1Z5800701B

最后一个字符串 '1Z5800701B' 应该在 '1Z5800701A' 之后。我在这里缺少什么?

最佳答案

这是使用的语言环境的问题,您可以使用 LC_ALL=en_US sort 在 bash shell 中重现相同的行为。 .关键是“单词分隔符”在此语言环境中的处理方式与“单词字符”不同(即,您不能总是说字符 X 在字符 B 之前或之后排序 - 这取决于上下文)。结果是如果你有 1Z5800701 <optional separators> A , 它排在 1Z5800701 <optional separators> B 之前,这就是为什么 1Z5800701BA 的所有组合之后出现出现在数字之后,可以选择用“分隔符”分隔。您还可以在 this Wikipedia articles 中看到更多“不明显”排序的示例。

关于java - Collat​​or 比较字符串很奇怪,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15230339/

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