我对字符串的默认比较器(在SortedSet中)有问题。问题是默认比较器没有排序包含数字的良好字符串,即:在集合中我有:
room1, room2, room100
自然排序应该如上所述,但在集合中我有:
room1, room100, room2
我知道它为什么但我不知道如何改变它。
发布于 2018-10-16 11:25:25
尝试此比较器,该比较器删除所有非数字字符,然后将其余字符作为数字进行比较:
Collections.sort(strings, new Comparator<String>() {
public int compare(String o1, String o2) {
return extractInt(o1) - extractInt(o2);
}
int extractInt(String s) {
String num = s.replaceAll("\\D", "");
// return 0 if no digits found
return num.isEmpty() ? 0 : Integer.parseInt(num);
}
});
public static void main(String[] args) throws IOException {
List<String> strings = Arrays.asList("room1", "foo", "room2", "room100", "room10");
Collections.sort(strings, new Comparator<String>() {
public int compare(String o1, String o2) {
return extractInt(o1) - extractInt(o2);
}
int extractInt(String s) {
String num = s.replaceAll("\\D", "");
// return 0 if no digits found
return num.isEmpty() ? 0 : Integer.parseInt(num);
}
});
System.out.println(strings);
}
输出:
[foo, room1, room2, room10, room100]
https://stackoverflow.com/questions/-100002910
复制相似问题