使用此代码,
Collections.sort(mEntries, new Comparator<ZipEntry>() {
public int compare(ZipEntry a, ZipEntry b) {
return a.getName().compareTo(b.getName());
}
});
当有这样的字符串时:hello1,hello3,hello2,hello11,hello10
它将被分类为:hello1,hello10,hello11,hello2,hello3
我想要的结果是:
hello1,hello2,hello3,hello10,hello11
但是当存在具有相同数字的字符串时,它可以正确地对其进行排序。
来自:hello01,hello03,hello02,hello11,hello10.
进入:hello01,hello02,hello03,hello10,hello11
任何想法如何实现我想要的结果?
hello1,hello2,hello3,hello10,hello11
谢谢。
答案 0 :(得分:0)
您正在使用的当前排序是自然(词典)String
排序,通过在compareTo
上调用String
得出。
根据词典排序,"10"
在 "2"
之前来自。
对于具有相同基数(以数字结尾)的String
所需的排序是数字排序,这是Number
s(算术)的自然排序。
根据自然Number
排序,10
将在 2
之后来。
你想要的是:
String
s Integer
s(通过正则表达式和Integer.parseInt
成语)compareTo
上调用Integer
方法并返回结果答案 1 :(得分:0)
没关系,它适用于此
Collections.sort(mEntries, new Comparator<ZipEntry>() {
public int compare(ZipEntry a, ZipEntry b) {
return String.format("%100s", a.getName()).compareTo(
String.format("%100s", b.getName()));
}
});
return null;
采用