java-HJ18_识别有效的IP地址和掩码并进行分类统计

java-HJ18 识别有效的IP地址和掩码并进行分类统计

import java.util.Scanner;

public class Main {
    private static int aNum = 0;
    private static int bNum = 0;
    private static int cNum = 0;
    private static int dNum = 0;
    private static int eNum = 0;
    private static int errNum = 0;
    private static int pNum = 0;

    public static void main(String[] args){
        Scanner in = new Scanner(System.in);

        while(in.hasNext()){
            String line = in.nextLine();

            String[] ipMask = line.split("~");
            int ipFirst = getIpSeg(ipMask[0], 0);

            if(ipFirst==0 || ipFirst==127){
                continue;
            }
            if(maskInvalid(ipMask[1])){
                errNum++;
                continue;
            }
            if(ipInvalid(ipMask[0])){
                errNum++;
                continue;
            }
            if(1<=ipFirst && ipFirst<=126){
                aNum++;
            }
            if(128<=ipFirst && ipFirst<=191){
                bNum++;
            }
            if(192<=ipFirst && ipFirst<=223){
                cNum++;
            }
            if(224<=ipFirst && ipFirst<=239){
                dNum++;
            }
            if(240<=ipFirst && ipFirst<=255){
                eNum++;
            }
            int ipSecond = getIpSeg(ipMask[0], 1);
            if(ipFirst==10 || (ipFirst==172 && (16<=ipSecond && ipSecond<=31)) || (ipFirst==192 && ipSecond==168)){
                pNum++;
            }
        }

        System.out.println(aNum + " " + bNum + " " + cNum + " " + dNum + " " + eNum + " " + errNum + " " + pNum);
    }

    public static boolean maskInvalid(String mask){
        String[] maskArray = mask.split("\\.");

        if(maskArray.length != 4){
            return true;
        }
        String maskBinary = toBinary(maskArray[0]) + toBinary(maskArray[1]) + toBinary(maskArray[2]) + toBinary(maskArray[3]);
        if(!maskBinary.matches("[1]{1,}[0]{1,}")){
            return true;
        }

        return false;
    }

    public static String toBinary(String num){
        StringBuilder numBinary = new StringBuilder(Integer.toBinaryString(Integer.parseInt(num)));
        while(numBinary.length() < 8){
            numBinary.insert(0, "0");
        }

        return numBinary.toString();
    }

    public static boolean ipInvalid(String ip){
        String[] ipArray = ip.split("\\.");

        if(ipArray.length != 4){
            return true;
        }
        if(Integer.parseInt(ipArray[0])>255 || Integer.parseInt(ipArray[1])>255 || Integer.parseInt(ipArray[2])>255 || Integer.parseInt(ipArray[3])>255){
            return true;
        }

        return false;
    }

    public static int getIpSeg(String ip, int seg){
        String[] ipArray = ip.split("\\.");

        return Integer.parseInt(ipArray[seg]);
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值