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

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

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

import java.util.Scanner;

public class Main {

    public static void main(String [] args) {
        Scanner in = new Scanner(System.in);
        int aCount = 0;
        int bCount = 0;
        int cCount = 0;
        int dCount = 0;
        int eCount = 0;
        int peCount = 0;
        int pCount  = 0;
        while (in.hasNextLine()) {
            String line = in.nextLine();
            if (line.length() == 0)continue;
            String [] arrs = line.split("~");
            String ip = arrs[0];
            String mark = arrs[1];

            if (!isValid(ip)) {
                peCount++;
            } else {
                int[] arr = getIntIP(ip);
                if (isIP(arr)) {
                    if (!isMark(mark)) {
                        peCount++;
                        continue;
                    }
                    if (isP(arr))pCount++;
                    if (isA(arr))aCount++;
                    if (isB(arr))bCount++;
                    if (isC(arr))cCount++;
                    if (isD(arr))dCount++;
                    if (isE(arr))eCount++;
                }
            }
        }
        System.out.println(aCount + " " + bCount + " " + cCount + " " + dCount + " " +
                           eCount + " " + peCount + " " + pCount);
    }

    private static boolean isA(int[] arr) {
        if (arr[0] >= 1 && arr[0] <= 126
                && arr[1] >= 0 && arr[1] <= 255
                && arr[2] >= 0 && arr[2] <= 255
                && arr[3] >= 0 && arr[3] <= 255) {
            return true;
        }
        return false;
    }

    private static boolean isB(int[] arr) {
        if (arr[0] >= 128 && arr[0] <= 191
                && arr[1] >= 0 && arr[1] <= 255
                && arr[2] >= 0 && arr[2] <= 255
                && arr[3] >= 0 && arr[3] <= 255) {
            return true;
        }
        return false;
    }

    private static boolean isC(int[] arr) {
        if (arr[0] >= 192 && arr[0] <= 223
                && arr[1] >= 0 && arr[1] <= 255
                && arr[2] >= 0 && arr[2] <= 255
                && arr[3] >= 0 && arr[3] <= 255) {
            return true;
        }
        return false;
    }

    private static boolean isD(int[] arr) {
        if (arr[0] >= 224 && arr[0] <= 239
                && arr[1] >= 0 && arr[1] <= 255
                && arr[2] >= 0 && arr[2] <= 255
                && arr[3] >= 0 && arr[3] <= 255) {
            return true;
        }
        return false;
    }

    private static boolean isE(int[] arr) {
        if (arr[0] >= 240 && arr[0] <= 255
                && arr[1] >= 0 && arr[1] <= 255
                && arr[2] >= 0 && arr[2] <= 255
                && arr[3] >= 0 && arr[3] <= 255) {
            return true;
        }
        return false;
    }

    private static boolean isP(int[] arr) {
        if (arr[0] == 10
                && arr[1] >= 0 && arr[1] <= 255
                && arr[2] >= 0 && arr[2] <= 255
                && arr[3] >= 0 && arr[3] <= 255) {
            return true;
        } else if (arr[0] == 172
                   && arr[1] >= 16 && arr[1] <= 31
                   && arr[2] >= 0 && arr[2] <= 255
                   && arr[3] >= 0 && arr[3] <= 255) {
            return true;
        } else if (arr[0] == 192
                   && arr[1] == 168
                   && arr[2] >= 0 && arr[2] <= 255
                   && arr[3] >=  0 && arr[3] <= 255) {
            return true;
        }
        return false;
    }

    private static int[] getIntIP(String ip) {
        String [] arr = ip.split("\\.");
        int [] intIpArr = new int[arr.length];
        for (int i = 0; i < arr.length; i++) {
            intIpArr[i] = Integer.parseInt(arr[i]);
        }
        return intIpArr;
    }

    private static boolean isMark(String ip) {
        String [] arr = ip.split("\\.");
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < arr.length; i++) {
            String bStr =  Integer.toBinaryString(Integer.parseInt(arr[i]));
            while (bStr.length() < 8) {
                bStr = "0".concat(bStr);
            }
            sb.append(bStr);
        }
        String str = sb.toString();
        if (!str.contains("0") || !str.contains("1") || str.contains("01"))return false;
        return true;
    }

    private static boolean isIP(int [] intIpArr) {
        return intIpArr[0] != 0 && intIpArr[0] != 127;
    }

    private static boolean isValid(String ip) {
        String [] arr = ip.split("\\.");
        for (int i = 0; i < arr.length; i++) {
            if (arr[i].length() == 0) {
                return false;
            }
        }
        return true;
    }
}
全部评论

相关推荐

09-14 20:51
四川大学 Java
慢热的鲸鱼在学习:985加粗就行了,第二个项目来不及准备也没事,省的写了问你你还不会。你只需准备面试八股和项目场景,剩下的交给985。即使面不过也没事,面试经验是最重要的,你现在不缺时间
简历中的项目经历要怎么写
点赞 评论 收藏
分享
09-13 17:25
亲切的00后在笔试:我也遇到了,所以我早他一步查看图片
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务