现在的字符串都是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
难不成要自己分割,然后一个个比较?谁有好的思路或者代码,可以参考一下!

解决方案 »

  1.   

    用 java.util.Arrays 的
    public static <T> void sort(T[] a, Comparator<? super T> c)
    函数自己写个Comparator实现:
    里面将字符串进行 split("\\.");然后依次比较即可,
      

  2.   

    ldh911 已经说出来了 根据ldh911 提示 下面是我写的代码 lz可以参考下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);
    }
      

  3.   

    可以转成long来比较
    long ip = 192*1000000000000 + 168*100000000 + 2*1000 + 1;
      

  4.   


    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);
    }
      

  5.   

    package com.lp.test;import java.util.ArrayList;
    import java.util.Collections;
    import java.util.Comparator;
    import java.util.List;public class IPSort {
    public static void main(String[] args) {
    String[] str = { "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"};
    List<String> list = new ArrayList<String>();
    for (int i = 0; i < str.length; i++) {
    list.add(str[i]);
    }
    Comparator<String> comparator = new Comparator<String>() {
    @Override
    public int compare(String o1, String o2) {
    String[] str1 = o1.split("\\.");
    String[] str2 = o2.split("\\.");
    if(str1[0].compareTo(str2[0]) > 0) {
    return 1;
    } else if (str1[0].compareTo(str2[0]) < 0) {
    return -1;
    } else {
    if(str1[1].compareTo(str2[1]) > 0) {
    return 1;
    } else if(str1[1].compareTo(str2[1]) > 0) {
    return -1;
    } else {
    if(str1[2].compareTo(str2[2]) > 0) {
    return 1;
    } else if(str1[2].compareTo(str2[2]) > 0) {
    return -1;
    } else {
    if(Integer.valueOf(str1[3]) > Integer.valueOf(str2[3])) {
    return 1;
    } else if(Integer.valueOf(str1[3]) < Integer.valueOf(str2[3])) {
    return -1;
    } else {
    return 0;
    }
    }
    }
    }
    }
    };
    Collections.sort(list, comparator);
    System.out.println(list);
    }
    }