如何在Java中使用前导零对数字进行排序?

时间:2015-09-17 15:38:24

标签: java algorithm sorting

嗨我有字符串列表作为带有前导零的输入,我想知道如何对它们进行排序。

输入(未分类)

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 -> 11 -> 1是相同的,无法排序。我想到的另一件事是删除零,并且在这些数字中没有前导零以将0放在后面所以

0-1->1
1->10
10->100

然后使用Java排序和后面的数字在起始位置但已排序?

修改

  • 结构的深度不受限制,所以1-2-3-4-5-6 ...
  • 我只能有一个领先0
  • 只允许破折号( - )和点(。)分位数。

1 个答案:

答案 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());