【发布时间】:2013-03-05 17:31:04
【问题描述】:
我有一个字符串集合,需要对其进行排序。我正在使用整理器。 但是输出很奇怪。
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”之后。我在这里错过了什么?
【问题讨论】:
-
为什么“1Z5800701A”会出现在“1Z5800701B”之后?
-
我不这么说。我说 1Z5800701B 应该在 1Z5800701A 之后,因为 B 按字母顺序排在 A 之后,不是吗?
-
记住 Collator
performs locale-sensitive String comparison。因此,它不完全是逐字符比较,而是特定于语言的比较。 -
我知道,但为什么 1Z5800701B 是美国地区的最后一个?