问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

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&lt;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&lt;addrs.length;i++){ System.out.println(addrs[i].getHostAddress()); } } }catch(Exception e){ ...

Java 排序 Java选择排序 Java list排序 Java快速排序 java map排序 如何使用java排序 java归并排序 java排序方法 java排序方法有哪些
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
梦见很多生疏人在一同 工地的建筑标高和结构标高有什么不同 十指合一是什么意思? ...墙面抹灰高度是按结构标高还是建筑标高? 柱面抹灰高度是按结构标高还... 吃干的东西吞咽困难是怎么回事 戒指带十指是什么意思? 荣耀畅玩8C具体是10月11日发布,10月16日开卖吗? 奇骏咱们的车(2.0)的,多少公里该换火花塞了?换那个牌子好。 离婚了,前夫家离给我打电话说嫂嫂去世了,我该不该回去? 笔记本的i3 370M 台式机I3 530性能差距有多少? 工商银行卡复印件怎么复印 把图中IP地址按照最后ip位的大小排序用wps怎么做? IP的 排列规律是什么? ip有多少?怎么排序? excel 表格 IP地址排序问题 IP地址排序问题 ip地址格式怎么排列举例 银行卡身份证正反面用一体复印机复印在一张A4 纸上的操作方法和步骤 在EXCEL中有一列是IP地址,如何按IP地址的最后一位排序??(前3位都一样) IP是怎么排序的 如何对IP地址进行排序 学历认证学制三还是叁 昨晚梦见自己拉了3坨屎(牛屎那般大),还把1坨装在袋子收拾起来... 怎么办?? 梦到在家里牛舍挖牛屎 学校组织报考长城认证的ISO9000&#47;ISO14000&#47;OHSAS18000三个证内审员,可这些证有用吗? 请问IC3认证需要学习些什么,谢谢 梦见我自己铲牛屎太多沒发铲 SAPR/3与SAP的区别是什么 梦见拿揪铲牛屎 桂林在哪里 联通电话卡不用了怎么注销? 关于EXCEL中数字(ip地址)大小的排序 联想网络同传系统,在传系统时如何进行ip主机网络名排序? EXCEL里统计了一份表格,想要把IP地址排序,比如19.19.19.1,19.19.19.2,19.19.19.3想要按这个格式排序 请问IP地址如何排序 C# 网上申请电信的电话卡怎么取消- 问一问 Excel中ip地址表如何排序 不用的手机号卡怎么注销? 怎么在excle表格中设置IP地址排序 苹果笔记本双系统开不了机怎么删除win 如何取消苹果笔记本开机界面的其它用户 kone电梯什么档次? kone是什么电梯 通力电梯有限公司电话是多少? 星都里购物中心电梯什么品牌 kone电梯质量怎么样 GiantKONE是什么牌子的电梯? kone怎么念 就是通力电梯。 为什么微信收到一条信息,看完后点了返回确找不到偶尔一条信息找不到?_百度问一问 KONE(通力电梯)懂的进!