嗨我有字符串列表作为带有前导零的输入,我想知道如何对它们进行排序。
输入(未分类)
0-2
0-1
1
1-2
1-0
1-1
4-3
输出(排序)
0-1
0-2
1
1-0
1-1
1-2
4-3
我可以删除“ - ”和前导零但是0-1 -> 1
和1 -> 1
是相同的,无法排序。我想到的另一件事是删除零,并且在这些数字中没有前导零以将0放在后面所以
0-1->1
1->10
10->100
然后使用Java排序和后面的数字在起始位置但已排序?
修改
答案 0 :(得分:8)
我用-
字符拆分字符串,然后将每个部分转换为int
:
public class StringPartsComparator implements Comparator<String> {
@Override
public int compare (String s1, String s2) {
String[] arr1 = s1.split("-");
int len1 = arr1.length;
String[] arr2 = s2.split("-");
int len2 = arr2.length;
int commonLength = Math.min(len1, len2);
// Go over the "common" elements.
// Return if any element differs from its counterpart
for (int i = 0; i < commonLength; ++i) {
int int1 = Integer.parseInt(arr1[i]);
int int2 = Integer.parseInt(arr2[i]);
int comp = Integer.compare(int1, int2);
if (comp != 0) {
return comp;
}
}
// All the common elements are equal,
// the longer string should be considered "bigger"
return Integer.compare(len1, len2);
}
}
现在,只需使用此自定义比较器对字符串进行排序:
List<String> myList = ...;
Collections.sort(myList, new StringPartsComparator());