解决方案 »

  1.   

    import java.util.ArrayList;
    import java.util.Collections;
    import java.util.Comparator;
    import java.util.List;public class TestSort {    public static void main(String[] args) {
            List<String> lists = new ArrayList<String>();
            lists.add("1.1");
            lists.add("1.2");
            lists.add("1.11");
            lists.add("2.1");
            lists.add("1.3.1");
            lists.add("1.4.1");
            lists.add("1.4.1.3");
            lists.add("1.4.2.3");
            lists.add("1.3");
            lists.add("1.4.2");
            lists.add("2.11");
            myComparator mycom = new myComparator();
            Collections.sort(lists, mycom);
            System.out.println(lists.toString());    }}class myComparator implements Comparator {    @Override
        public int compare(Object obj1, Object obj2) {
            if (obj1 == null || obj2 == null) {
                return -1;
            }
            String[] temp1 = obj1.toString().split("\\.");
            String[] temp2 = obj2.toString().split("\\.");
            String[] str1;
            String[] str2;
            if (temp1.length > temp2.length) {
                str2 = temp1;
                str1 = temp2;
            } else {
                str1 = temp2;
                str2 = temp1;
            }
            for (int i = 0; i < str2.length; i++) {
                if (i <= (str1.length - 1)) {
                    if (Long.valueOf(str2[i])>Long.valueOf(str1[i])) {
                        return 1;
                    } else if (Long.valueOf(str2[i])<Long.valueOf(str1[i])) {
                        return -1;
                    } else {
                        continue;
                    }
                } else {
                    return 1;
                }
            }
            return 0;
        }}结果:
    [1.1, 1.2, 1.3, 1.3.1, 1.4.1, 1.4.1.3, 1.4.2, 1.4.2.3, 1.11, 2.1, 2.11]呵呵还是我自己给我自己代言
      

  2.   


    package test;public class TestSort {
    public static void main(String[] args) {
    String[] strs ={"1.1","1.2","1.11","2.1","1.3.1","1.4.1","1.4.1.3","1.4.2.3","1.3","1.4.2","2.11"};
    int[] a = { 0, 0, 0, 0 };
    int[] b = { 0, 0, 0, 0 };
    String[] s1;
    String[] s2;
    String temp = "";
    int flg = 0;
    for (int i = 1; i < strs.length; i++) { for (int j = i; j > 0; j--) { s1 = strs[j].split("\\.");
    s2 = strs[j - 1].split("\\."); for (int m = 0; m < s1.length; m++) {
    a[m] = Integer.parseInt(s1[m]);
    }


    for (int m = 0; m < s2.length; m++) {;
    b[m] = Integer.parseInt(s2[m]);
    } for (int n = 0; n < 4; n++) { if ((flg = (a[n] - b[n])) != 0) {
    break;
    }
    } if (flg < 0) {
    temp = strs[j];
    strs[j] = strs[j - 1];
    strs[j - 1] = temp;
    } }
    } System.out.println("排序后");
    for (String s : strs)
    System.out.print(s + ", "); }}
    排序后
    1.1, 1.2, 1.3.1, 1.3, 1.4.1, 1.4.1.3, 1.4.2.3, 1.4.2, 1.11, 2.1, 2.11, 还是一个排序算法,比较大小的方法略有不同。
    我的思路是将其装换成一个整形数组,使用循环按位比较大小,直至出现不等。楼主这里限定了层级。本人菜鸟,楼主给点分鼓励下呗
      

  3.   

    写一个Comparator然后交给Collections.sort去排序就好了
    写一个正确的应该不难,不过如果要考虑效率问题的话这就是一个复杂的问题了
    考虑到你的需求应该比较固定,只需要split字符'.',所以自己写了一个专门针对'.'的split。
    另外先将字符串的char数组保存起来,然后排序char数组,最后再转换回字符串,对于我这个split方法来说可以避免重复toCharArray生成太多冗余char数组。
    当然这不是最高效的办法,最好的办法是用int数组保存这些数据而不是字符串(不过要在效率很重要的前提下,否则过早优化毫无意义)。以下代码输出
    [1.1, 1.2, 1.2, 1.3, 1.3.1, 1.4.1, 1.4.1.3, 1.4.2, 1.4.2.3, 1.11, 2.1, 2.11]
    public static void main(String[] args) {
    String[] strs = {"1.1", "1.2", "1.11", "2.1", "1.3.1", "1.4.1",
    "1.4.1.3", "1.4.2.3", "1.3", "1.2", "1.4.2", "2.11"};
    List<char[]> list = new ArrayList<>();
    for (String str : strs) {
    list.add(str.toCharArray());
    }

    Comparator<char[]> c = new Comparator<char[]>() {
    @Override
    public int compare(char[] v1, char[] v2) {
    int p1 = 0, p2 = 0;
    int d1 = 0, d2 = 0;
    while (p1 < v1.length && p2 < v2.length) {
    while (p1 < v1.length && v1[p1] != '.') {
    p1++;
    }
    while (p2 < v2.length && v2[p2] != '.') {
    p2++;
    }
    int i1 = Integer.parseInt(new String(v1, d1, p1 - d1));
    int i2 = Integer.parseInt(new String(v2, d2, p2 - d2));
    if (i1 != i2) {
    return i1 - i2;
    }
    d1 = ++p1;
    d2 = ++p2;
    }

    return v1.length - v2.length;
    }
    };

    Collections.sort(list, c);
    for (int i = 0; i < strs.length; i++) {
    strs[i] = new String(list.get(i));
    }
    System.out.println(Arrays.toString(strs));
    }
      

  4.   

    更新一下
    package ex;public class TestSort {
    public static void main(String[] args) {
    String[] strs ={"1.1","1.2","1.11","2.1","1.3.1","1.4.1","1.4.1.3","1.4.2.3","1.3","1.4.2","2.11"};
    //String[] strs ={"1.2","1.1"};
    int[] a = { 0, 0, 0, 0 };
    int[] b = { 0, 0, 0, 0 };
    String[] s1;
    String[] s2;
    String temp = "";
    int flg = 0;
    for (int i = 1; i < strs.length; i++) { for (int j = i; j > 0; j--) { s1 = strs[j].split("\\.");
    s2 = strs[j - 1].split("\\."); for (int m = 0; m < s1.length; m++) {
    a[m] = Integer.parseInt(s1[m]);
    } for (int m = 0; m < s2.length; m++) {;
    b[m] = Integer.parseInt(s2[m]);
    }
    for (int n = 0; n < 4; n++) { if ((a[n] - b[n]) != 0) {
    flg = a[n]-b[n];
    System.out.println("flg = "+flg);
    break;
    }

    }
    if (flg < 0) {
    temp = strs[j];
    strs[j] = strs[j - 1];
    strs[j - 1] = temp;
    } }
    } System.out.println("排序后");
    for (String s : strs)
    System.out.print(s + ", "); }}排序后
    1.1, 1.2, 1.3, 1.3.1, 1.4.1, 1.4.1.3, 1.4.2, 1.4.2.3, 1.11, 2.1, 2.11, 
      

  5.   

    public static void main(String[] args) {
    String[] strs=new String[]{"1.1","1.2","1.11","2.1","1.3.1","1.4.1","1.4.1.3","1.4.2.3","1.3","1.4.2","2.11"};
    Arrays.sort(strs,new Comparator<String>(){
    @Override
    public int compare(String o1, String o2) {
    String[] strs1=o1.split("\\.");
    String[] strs2=o2.split("\\.");
    int length=strs1.length>strs2.length?strs1.length:strs2.length;
    for(int i=0;i<length;i++){
    int num1=0;
    int num2=0;
    try{
    num1=Integer.parseInt(strs1[i]);
    num2=Integer.parseInt(strs2[i]);
    }catch(Exception e){

    }
    if(num1<num2)
    return -1;
    if(num1>num2)
    return 1;
    }
    return 0;
    }

    });
    System.out.println(Arrays.toString(strs));
    }