ip地址的几种处理方式

来源:互联网 发布:数据库系统概念第六版 编辑:程序博客网 时间:2024/06/06 00:38

读入String类型的ip地址,几种处理方式如下:


1. ip分段,不足三位处补0

String myIp = "200.22.22.228";//先对每段ip追加两个0,再保留后三位,从而将ip地址转换为每段3位的格式myIp = myIp.replaceAll("(\\d{1,3})", "00$1");myIp = myIp.replaceAll("0*(\\d{3})", "$1");System.out.println(myIp);


2. 去掉前置0

public String removeZero(String ip) {if(ip != "") {String[] ss = ip.split("\\.");ip = "";for(int i = 0; i < ss.length; i++) {ip += ss[i].replaceAll("^[0]+", "");//或采用ip转成int再转回来if(i != ss.length - 1) {ip += ".";}}}return ip;}

3. String型ip转换为对应的32位long型数

public long getLongIp(String ip) {long longIp = 0;if(ip != "") {String[] ss = ip.split("\\.");for(int i = 0; i < ss.length; i++) {//移位运算一定要加()!!longIp = (longIp<<8) + Integer.parseInt(ss[i]);}}return longIp;}
或利用scanner直接读取long


public long getLongIp2(String ip) {Scanner sc = new Scanner(ip).useDelimiter("\\.");return (sc.nextLong()<<24) + (sc.nextLong()<<16) + (sc.nextLong()<<8) + (sc.nextLong());}

4. 遍历某个ip段内所有ip地址(重要)

将ip转为Int型数组,每段代表一个0-255的数,对数组进行循环进位操作

public Object[] getAllIp(String startIp, String endIp) {    ArrayList<String> ips = new ArrayList<String>();    String[] astartIp = startIp.split("\\.");    String[] aendIp = endIp.split("\\.");    int[] istartIp = new int[4];    int[] iendIp = new int[4];    for (int i = 0; i < 4; i++) {        istartIp[i] = Integer.parseInt(astartIp[i]);        iendIp[i] = Integer.parseInt(aendIp[i]);    }    for (int A = istartIp[0]; A <= iendIp[0]; A++) {        for (int B = (A == istartIp[0] ? istartIp[1] : 0); B <= (A == iendIp[0] ? iendIp[1]                : 255); B++) {            for (int C = (B == istartIp[1] ? istartIp[2] : 0); C <= (B == iendIp[1] ? iendIp[2]                    : 255); C++) {                for (int D = (C == istartIp[2] ? istartIp[3] : 0); D <= (C == iendIp[2] ? iendIp[3]                        : 255); D++) {                    ips.add(new String(A + "." + B + "." + C + "." + D));                }            }        }    }    return ips.toArray();}




0 0
原创粉丝点击