ip字符串排序

岁月之梦 2012-03-12 01:00:25
现在的字符串都是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
难不成要自己分割,然后一个个比较?谁有好的思路或者代码,可以参考一下!
...全文
166 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
Alan-AK 2012-03-14
  • 打赏
  • 举报
回复
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);
}
}
昨日凡阳 2012-03-13
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 qybao 的回复:]

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




[Quote=引用 5 楼 bill0605030109 的回复:]

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");
l……
[/Quote]


思路基本就是这样。
2,3,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);
}
qybao 2012-03-13
  • 打赏
  • 举报
回复
可以转成long来比较
long ip = 192*1000000000000 + 168*100000000 + 2*1000 + 1;
ypb137154098 2012-03-13
  • 打赏
  • 举报
回复
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);
}

岁月之梦 2012-03-13
  • 打赏
  • 举报
回复
很多人不宵一顾 a
MiceRice 2012-03-12
  • 打赏
  • 举报
回复
用 java.util.Arrays 的
public static <T> void sort(T[] a, Comparator<? super T> c)
函数

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

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧