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

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

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

import java.util.Scanner;


// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int numA = 0;
        int numB = 0;
        int numC = 0;
        int numD = 0;
        int numE = 0;
        int numError = 0;
        int numPrivateIp = 0;



        while (in.hasNext()) { 
            String[] adress = in.nextLine().split("~");
            String[] ip = adress[0].split("\\.");
            String[] mask = adress[1].split("\\.");
            int[] ipCode = new int[ip.length];
            int[] maskCode = new int[mask.length];
            boolean flag = true;
            String maskBinary = "";
            for (int i = 0; i < ip.length; i++) {
                if (ip[i].isEmpty() || mask[i].isEmpty()) {
                    numError++;
                    flag = false;
                    break;
                } else {
                    ipCode[i] = Integer.parseInt(ip[i]);
                    maskCode[i] = Integer.parseInt(mask[i]);

                    maskBinary = maskBinary + String.format("%8s",Integer.toBinaryString(maskCode[i])).replace(' ', '0');
                }



            }

            if (flag) {
                if (ipCode[0] == 0 || ipCode[0] == 127)continue;
                if (ipCode.length != 4 && maskCode.length != 4) {
                    numError++;
                    continue;
                }
                if (!maskBinary.matches("[1]+[0]+")) {
                    numError++;
                    continue;

                }
                if (ipCode[0] > 0 && ipCode[0] < 127) {

                    numA++;
                    if (ipCode[0] == 10) {
                        numPrivateIp++;
                    }

                } else if (ipCode[0] > 127 && ipCode[0] < 192) {

                    numB++;
                    if (ipCode[0] == 172 && ipCode[1] >= 16 && ipCode[1] <= 31)
                        numPrivateIp++;

                } else if (ipCode[0] > 191 && ipCode[0] < 224) {

                    numC++;
                    if (ipCode[0] == 192 && ipCode[1] == 168)
                        numPrivateIp++;


                } else if (ipCode[0] > 223) {

                    if (ipCode[0] < 240)
                        numD++;
                    else
                        numE++;

                }
            }
        }

        System.out.println(numA + " " + numB + " " + numC + " " + numD + " " + numE +
                           " " + numError + " " + numPrivateIp);
    }

}

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

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