当前位置: 代码迷 >> J2EE >> ip字符串排序解决办法
  详细解决方案

ip字符串排序解决办法

热度:51   发布时间:2016-04-22 01:54:39.0
ip字符串排序
现在的字符串都是ip地址,如下
192.168.2.1
192.168.2.2
192.168.2.3
192.168.2.16
192.168.2.5
192.168.2.17
122.168.2.11
172.168.2.12
122.168.2.1
172.168.2.5
怎么能快速排序如下:
 122.168.2.1
 122.168.2.11
172.168.2.5
172.168.2.12
192.168.2.1
192.168.2.2
192.168.2.3
192.168.2.5
192.168.2.16
192.168.2.17
难不成要自己分割,然后一个个比较?谁有好的思路或者代码,可以参考一下!


------解决方案--------------------
用 java.util.Arrays 的
public static <T> void sort(T[] a, Comparator<? super T> c)
函数

自己写个Comparator实现:
里面将字符串进行 split("\\.");然后依次比较即可,

------解决方案--------------------
ldh911 已经说出来了 根据ldh911 提示 下面是我写的代码 lz可以参考下
Java code
Comparator compare = new  Comparator(){            public int compare(Object obj1, Object obj2){                String[] ips1 = obj1.toString().split("\\.");                String[] ips2 = obj2.toString().split("\\.");                if(Integer.parseInt(ips1[0].toString()) != Integer.parseInt(ips2[0].toString())){                    if(Integer.parseInt(ips1[0].toString()) > Integer.parseInt(ips2[0].toString())){                        return 1;                    }else{                        return 0;                    }                }else if(Integer.parseInt(ips1[1].toString()) != Integer.parseInt(ips2[1].toString())){                    if(Integer.parseInt(ips1[1].toString()) > Integer.parseInt(ips2[1].toString())){                        return 1;                    }else{                        return 0;                    }                }else if(Integer.parseInt(ips1[2].toString()) != Integer.parseInt(ips2[2].toString())){                    if(Integer.parseInt(ips1[2].toString()) > Integer.parseInt(ips2[2].toString())){                        return 1;                    }else{                        return 0;                    }                }else{                    if(Integer.parseInt(ips1[3].toString()) > Integer.parseInt(ips2[3].toString())){                        return 1;                    }else{                        return 0;                    }                }            }                    };                List<String> list = new ArrayList<String>();        list.add("192.168.2.1");        list.add("192.165.2.11");        list.add("192.156.2.5");        list.add("192.109.2.16");        Collections.sort(list, compare);        for (String string : list) {            System.out.println(string);        }
------解决方案--------------------
可以转成long来比较
long ip = 192*1000000000000 + 168*100000000 + 2*1000 + 1;

------解决方案--------------------
Java code
List<String> list = new ArrayList<String>();        list.add("192.168.2.1");        list.add("192.168.2.2");        list.add("192.168.2.3");        list.add("192.168.2.16");        list.add("192.168.2.5");        list.add("192.168.2.17");        list.add("122.168.2.11");        list.add("172.168.2.12");        list.add("122.168.2.1");        list.add("172.168.2.5");                Collections.sort(list,new Comparator(){            public int compare(Object o1,Object o2) {                                String[] ips1 = o1.toString().split("\\.");                String[] ips2 = o2.toString().split("\\.");                long ip1 = (Long.parseLong(ips1[0])*1000000000 + Long.parseLong(ips1[1])*1000000                        + Long.parseLong(ips1[2])*1000 + Long.parseLong(ips1[3]));                                long ip2 = (Long.parseLong(ips2[0])*1000000000 + Long.parseLong(ips2[1])*1000000                        + Long.parseLong(ips2[2])*1000 + Long.parseLong(ips2[3]));                                return (ip1 > ip2)?1:-1;            }        });                for(String str:list) {            System.out.println(str);        }
  相关解决方案