IP 地址排序Java
发布网友
发布时间:2022-04-29 01:34
我来回答
共6个回答
懂视网
时间:2022-05-15 10:53
这次给大家带来正则表达式怎样对IP进行排序,正则表达式对IP进行排序的注意事项有哪些,下面就是实战案例,一起来看一下。
1、补零,使得可以按照字符串顺序进行比较。
2、截取保留后三位(ip地址最多就3位)。
3、利用Arrays.sort()方法对截取的字符串进行排序。。
4、去除多余的0,回复ip原样。
5、实现代码:
package IPSort;
import java.util.Arrays;
/**
* 利用正则表达对IP进行排序,分四步
* @author tiger
*
*/
public class IPSortTest {
public static void main(String[] args) {
String[] ips = {"10.2.4.23","192.168.1.2","173.68.46.65","191.158.6.2","9.2.4.23"};
System.out.println("------1、补零------");
for (int i = 0; i < ips.length; i++) {
ips[i] = ips[i].replaceAll("(\d+)", "00$1");
System.out.println(ips[i]);
}
System.out.println("------2、截取------");
for (int i = 0; i < ips.length; i++) {
ips[i] = ips[i].replaceAll("0*(\d{3})", "$1");
System.out.println(ips[i]);
}
System.out.println("------3、排序------");
Arrays.sort(ips);
for (int i = 0; i < ips.length; i++) {
System.out.println(ips[i]);
}
System.out.println("------4、去零------");
for (int i = 0; i < ips.length; i++) {
ips[i] = ips[i].replaceAll("0*(\d+)", "$1");
System.out.println(ips[i]);
}
}
}
6、运行结果:
------原IP地址------
10.2.4.23
192.168.1.2
173.68.46.65
191.158.6.2
9.2.4.23
------1、加零,按字符串顺序比较------
0010.002.004.0023
00192.00168.001.002
00173.0068.0046.0065
00191.00158.006.002
009.002.004.0023
------2、截取,保留三位------
010.002.004.023
192.168.001.002
173.068.046.065
191.158.006.002
009.002.004.023
------3、排序------
009.002.004.023
010.002.004.023
173.068.046.065
191.158.006.002
192.168.001.002
------4、去零------
9.2.4.23
10.2.4.23
173.68.46.65
191.158.6.2
192.168.1.2
相信看了本文案例你已经掌握了方法,更多精彩请关注Gxl网其它相关文章!
推荐阅读:
Linux grep与正则表达式的使用
怎么用正则把字符串分组
用正则表达式验证登录页面的输入内容
热心网友
时间:2022-05-15 08:01
package src;
import java.util.Comparator;
import java.util.List;
import java.util.ArrayList;
import java.util.Collections;
class Ip { //定义ip bean
int ip1;
int ip2;
int ip3;
int ip4;
public Ip(int ip1, int ip2, int ip3, int ip4) {
this.ip1 = ip1;
this.ip2 = ip2;
this.ip3 = ip3;
this.ip4 = ip4;
}
public int getIp1() {
return ip1;
}
public void setIp1(int ip1) {
this.ip1 = ip1;
}
public int getIp2() {
return ip2;
}
public void setIp2(int ip2) {
this.ip2 = ip2;
}
public int getIp3() {
return ip3;
}
public void setIp3(int ip3) {
this.ip3 = ip3;
}
public int getIp4() {
return ip4;
}
public void setIp4(int ip4) {
this.ip4 = ip4;
}
}
class ComparatorUser implements Comparator {
public int compare(Object arg1, Object arg2) {
Ip ip1 = (Ip) arg1;
Ip ip2 = (Ip) arg2;
int flag = ip1.getIp1() - ip2.getIp1();
if (flag == 0) { //如果一段相等用二段排序,以此类推
flag = ip1.getIp2() - ip2.getIp2();
} else if (flag == 0) {
flag = ip1.getIp3() - ip2.getIp3();
} else if (flag == 0) {
flag = ip1.getIp4() - ip2.getIp4();
}
return flag;
}
}
public class Test {
public static void main(String[] args) {
List<Ip> ipList = new ArrayList<Ip>(); //定义ip List
ipList.add(new Ip(255, 2, 3, 4)); //存放ip,你的ip是从文本中读出来的.我相信你会读,也会放.
ipList.add(new Ip(172, 7, 8, 2));
ipList.add(new Ip(2, 3, 4, 5));
ipList.add(new Ip(2, 1, 2, 3));
ipList.add(new Ip(1, 2, 3, 4));
ipList.add(new Ip(202, 2, 3, 4));
ComparatorUser comparator = new ComparatorUser();
Collections.sort(ipList, comparator);
for (Ip ip : ipList) { //输出结果,jdk 1.5以上可以这么遍历list,如果你是1.4 就用list的长度遍历即可
System.out.println(ip.getIp1() + "." + ip.getIp2() + "."
+ ip.getIp3() + "." + ip.getIp4());
}
}
}
运行结果如下.
1.2.3.4
2.1.2.3
2.3.4.5
172.7.8.2
202.2.3.4
255.2.3.4
热心网友
时间:2022-05-15 09:19
import java.util.Arrays;
public class IPAddressSort {
public static void main(String[] args) {
String[] ip = { "255.2.3.4", "172.7.8.2", "192.10.8.9", "192.10.8.7", "2.3.4.5", "2.4.5.6", "1.2.3.45" };
ip = fill(ip);//先填充ip地址,前面补0
Arrays.sort(ip);//调用Arrays里的sort(Object[] o)方法进行排序
ip = recovery(ip);//回复ip地址,去除补上的0
for (String s : ip) {//输出效果
System.out.println(s);
}
}
static String[] fill(String[] ip) {
for (int i = 0; i < ip.length; i++) {
String[] temp = ip[i].split("\\.");//字符串分组split()方法里是填正则表达式。所用用“\\.”
ip[i] = "";//先设为空字符
for (int j = 0; j < temp.length; j++) {
if (Integer.parseInt(temp[j]) / 10 == 0) {//当该ip段为0-9时,前面补两个0
temp[j] = "00" + temp[j];
} else if (Integer.parseInt(temp[j]) / 100 == 0) {//当该ip段为10-99时,前面补一个0
temp[j] = "0" + temp[j];
}
ip[i] += temp[j] + ".";//重新赋值
}
ip[i] = ip[i].substring(0, ip[i].length() - 1);//去除最后一个多余的“.”
}
return ip;
}
static String[] recovery(String[] ip) {
for (int i = 0; i < ip.length; i++) {
String[] temp = ip[i].split("\\.");
ip[i] = "";
for (int j = 0; j < temp.length; j++) {
if (temp[j].startsWith("00")) {//去除0-9前面的0,一定要放前面
temp[j] = temp[j].substring(2);
} else if (temp[j].startsWith("0")) {//去除10-99前面的0,一定要放后面
temp[j] = temp[j].substring(1);
}
ip[i] += temp[j] + ".";
}
ip[i] = ip[i].substring(0, ip[i].length() - 1);
}
return ip;
}
}
//用2L的思路实现的。这个思路比较好。追问--分就给你吧,同时也感谢AiDirac--想得周全;只是所有答案都太繁琐了,我用Ruby解决了,代码如下:
ip_array = []
IO.foreach("ip.txt") { |line|
line.chomp
ip_array << line.split(/\./).map!{ |o| o.to_i }.pack("C*")
}
ip_array.sort.each { |ip|
print ip.unpack("C*").join("."), "\n"
}
热心网友
时间:2022-05-15 10:53
ip.txt就按LZ给的,排序完成后在控制台会输出排序后的,ip.txt里面也会变成排序后的结果,
完整代码(请看注释):
//Test.java
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
public class Test {
public static void main(String[] args) throws IOException {
//读入ip.txt文件 我放C盘下面,你可以自己定义位置
BufferedReader br = new BufferedReader(new FileReader("c:/ip.txt"));
List <String> list = new ArrayList<String>();
String str;
//将每条ip都读入list(ip.txt里面,一条IP一行)
while((str=br.readLine())!=null)
list.add(str);
//采用IPComparator的算法进行排序
Collections.sort(list,IPComparator);
//控制输出一下,如果不需要 你可以去掉
for(Object o :list)
System.out.println((String)o);
br.close();
//把排序好的,输出回ip.txt
BufferedWriter bw = new BufferedWriter(new FileWriter("c:/ip.txt"));
for(Object o:list)
{
bw.write((String)o+"\r\n");
bw.flush();
}
bw.close();
}
//后面的内容都是IPComparator算法的东西。
public static int compartTo(String ip1,String ip2){
long[] ip11=parseIp(ip1);
long[] ip22=parseIp(ip2);
long ip1Result=0,ip2Result=0;
for(int i=0;i<4;i++){
ip1Result+=(ip11[i]<<(24-i*8));
}
for(int i=0;i<4;i++){
ip2Result+=(ip22[i]<<(24-i*8));
}
if(ip1Result-ip2Result>0){
return 1;
}else if(ip1Result-ip2Result<0){
return -1;
}else{
return 0;
}
}
public static Comparator IPComparator=new Comparator(){
public int compare(Object ip1, Object ip2) {
return compartTo((String)ip1,(String)ip2);
}
};
private static long[] parseIp(String ip){
ip=ip.replace(".", "#");
long result[]=new long[4];
String[] ip1=ip.split("#");
if(ip!=null){
result[0]=Long.parseLong(ip1[0]);
result[1]=Long.parseLong(ip1[1]);
result[2]=Long.parseLong(ip1[2]);
result[3]=Long.parseLong(ip1[3]);
}
return result;
}
}
热心网友
时间:2022-05-15 12:45
建议这样做,将ip地址的每一段都填充为三位(两位和一位的用零填充),删除地址中的'.',然后导入到Arrays,使用sort()方法进行排序
热心网友
时间:2022-05-15 14:53
按"."截取为四段字符串~将每段转为整型也就是数字,再将整型变量,按你需求进行比较排序即可~
java里面ip地址用什么类型储存
getAddress public byte[] getAddress()返回此 InetAddress 对象的原始 IP 地址。结果按网络字节顺序:地址的高位字节位于 getAddress()[0] 中。覆盖:类 InetAddress 中的 getAddress 返回:此对象的原始 IP 地址。所以是byte
java 给出两段ip,返回中间包含的所有ip地址
for(i1从ip1address1到ip2address1)for(i2从ip1address2到255)但这里要判断如果ip1address1==ip2address1,则不是到255,而是到ip2address2 for第三段,类似第二段 for第四段,类似二三段 String s = i1 + "." + i2 + "." + i3 + "." + i4;
java 怎么根据IP地址获取主机名
import java.net.InetAddress;import java.net.UnknownHostException;import java.util.Properties;import java.util.Set;public class TestSystemProperties {public static void main(String [] args){InetAddress netAddress = getInetAddress();System.out.println("host ip:" + getHostIp(netAddress));...
用java语言,写一段代码,比较两个ip地址的大小
比较Ip地址的大小就是 先比较两个IP的a部分,如果谁的大,那这个Ip就是叫大的Ip;如果相等,就比较b部分;向下走直到d部分。 public boolean compare(String startIp,String endIp){ String startips[]=startIp.split("\\.");String endIps[]=endIp.split("\\.");for(int i=0;i<startips...
JAVA中取到IP地址,去掉最后一个.之后的内容
String ip = "192.168.1.233";ip = ip.substring(0, ip.lastIndexOf("."));
用java语言,写一段代码,比较两个ip地址的大小
你好,可以把IP去掉‘.’,然后再比较 private bool validateIP(string startIP,string endIP){ // 分离出ip中的四个数字位 string[] startIPArray = startIP.Split('.');string[] endIPArray = endIP.Split('.');// 取得各个数字 long[] startIPNum = new long[4];long[] endIPNum =...
Java_网络编程
Java_网络编程@[TOC]网络编程网络编程目的: 无线电接收,通信,连接数据交换 共享网络通信的两大要素:通信双方的IP地址+端口号通信协议(FTP文件传输协议,SMTP发送邮件,TCP,UDP,HTTP)。实际上主要学习的是TCP/
java算法 将ip地址段拆分成一个个
有一个字符串的IP组:10.46.40.1--10.46.88.127,将这个ip地址段拆分为一个个ip地址,如 10.46.40.1;10.46.40.2;10.46.40.3。。。一直到10.46.88.125;10.46.88.126;10.46.88.127,最后将这些单个地址存入一个数组中 要写一个算法 / public static void main(String[] args)...
如何获取局域网内所有IP地址 java代码
1.得到局域网网段,可由自己机器的IP来确定 (也可以手动获取主机IP-CMD-ipconfig /all)2.根据IP类型,一次遍历局域网内IP地址 JAVA类,编译之后直接运行便可以得到局域网内所有IP,具体怎样使用你自己编写相应代码调用便可 代码如下::package bean;import java.io.*;import java.util.*;public ...
如何使用Java来实现域名和IP地址转换
域名转IP:public static void main(String[] args) { try{ InetAddress[] addrs=InetAddress.getAllByName("www.baidu.com"); if(null!=addrs){ for(int i=0;i<addrs.length;i++){ System.out.println(addrs[i].getHostAddress()); } } }catch(Exception e){ ...