[识别有效的IP地址和掩码并进行分类统计]

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

http://www.nowcoder.com/questionTerminal/de538edd6f7e4bc3a5689723a7435682

import java.util.*;

public class Main{
    public static void main(String[] args){
        Scanner in = new Scanner(System.in);
        int A = 0, B = 0, C = 0, D = 0, E = 0, errorNum =  0, prIp = 0;
        while(in.hasNext()){
            String[] str = in.nextLine().split("~");
            String ip = str[0], mask = str[1];
            //掩码处理
            String[] strs = mask.split("\\.");
            int maskNum = 0;
            //转换为int整型数据
            for(int i = 0; i < 4; ++i){
                int x = Integer.valueOf(strs[i]);
                maskNum |= x<<(8*(3-i)); 
            }
            //全1全0不合法
            if(maskNum == 0 || maskNum == -1){
                ++errorNum;
                continue;
            }else{
                //把前面的1都移掉
                int tmp = 1 << 31;
                while((maskNum & tmp) == tmp){
                    maskNum <<= 1;
                }
                //如果移掉后不为0,说明不满足掩码格式
                if(maskNum != 0){
                    ++errorNum;
                    continue;
                }
            }
            //处理IP
            String[] sh = ip.split("\\.");
            if(sh.length == 4){ 
                int first = Integer.valueOf(sh[0]);
                int second = Integer.valueOf(sh[1]);
                if(first != 0 && first != 127){
                    if(first >= 1 && first <= 126){
                        A++;
                        if(first == 10) ++prIp;
                    }
                    if(first >= 128 && first <= 191){
                        B++;
                        if(first == 172 && second >= 16 && second <= 31) ++prIp;
                    }
                    if(first >= 192 && first <= 223){
                        C++;
                        if(first == 192 && second == 168) ++prIp;
                    }
                    if(first >= 224 && first <= 239){
                        D++;
                    }
                    if(first >= 240 && first <= 255){
                        E++;
                    }
                }
            }else{
                ++errorNum;
            }

        }
        System.out.println(A + " " + B + " "+C+" "+D+" "+E+" "+errorNum+" "+prIp);
    }
}
全部评论

相关推荐

2 收藏 评论
分享
牛客网
牛客企业服务