JAVA-朴素解法 又臭又长

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

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

主要就是合法性判断 和 ip计数 错误ip/mask 计数

import java.util.*;
import java.io.*;
public class Main{
    public static void main(String[] args) throws IOException{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int[] cc=new int[7];
        String in;
         while ((in = br.readLine()) != null) {
            String[] sin=in.split("~");
            String ip=sin[0];String mask=sin[1];
            boolean isIP=isIP(ip,cc);boolean isMask=isMask(mask);
            if(isIP && isMask){
                 cc=countIP(ip,cc);
            }else{
                 cc[5]++;
            }
         }//while end
        for(int i=0;i<6;i++)
            System.out.print(cc[i]+" ");
        System.out.print(cc[6]);
        }//method end

    public static boolean isIP(String ip,int[] count){
        //ip合法性判断,
        //1. 类似于【0.*.*.*】和【127.*.*.*】的IP地址不属于上述输入的任意一类,也不属于不合法ip地址,计数时可以忽略
        //默认判定其为真即可,因为后续ip计数是避开了这两个字段的 
        //但是为了不影响 查找其对应子网掩码错误的时候 需要计数 我们这里 默认为真即可
        String[] iparr=ip.split("\\.");
        Boolean isTrue = true;
        for (int i = 0; i < iparr.length; i++) {
            if (iparr[i].length() <= 0 || iparr[i] == "") {//非法判断
                isTrue = false;
            }
        }
        return isTrue;
    }//method end

    public static boolean isMask(String mask){
        //子网掩码合法性判断
        String[] maskarr=mask.split("\\.");
        boolean res=false;
        int[] maskRange = {254, 252, 248, 240, 224, 192, 128, 0};
        List<Integer> list=new ArrayList();
        for(int i:maskRange)
            list.add(i);

        if ("255".equals(maskarr[0])&&"255".equals(maskarr[1])&&"255".equals(maskarr[2])) {
            if (list.contains(Integer.parseInt(maskarr[3]))) {
                res=true;
            }
        }else if("255".equals(maskarr[0])&&"255".equals(maskarr[1])){
            if(list.contains(Integer.parseInt(maskarr[2]))&&"0".equals(maskarr[3])){
                res=true;
            }
        }else if("255".equals(maskarr[0])){
            if(list.contains(Integer.parseInt(maskarr[1]))&&"0".equals(maskarr[2])&&"0".equals(maskarr[3])){
                res=true;
            }
        }else if(list.contains(Integer.parseInt(maskarr[0]))){
            if("0".equals(maskarr[1])&&"0".equals(maskarr[2])&&"0".equals(maskarr[3])){
                res=true;
            }
        }
        return res;
    }//method end

    public static boolean isPrivateIP(String ip){
        //私有IP判断
        String[] sin=ip.split("\\.");
        if(Integer.parseInt(sin[0])==10) return true;
        else if(Integer.parseInt(sin[0])==172&&(Integer.parseInt(sin[1])>15&&Integer.parseInt(sin[1])<32)){
            return true;
        }else if(Integer.parseInt(sin[0])==192&&Integer.parseInt(sin[1])==168){
            return true;
        }else{
            return false;
        }

    }//method end

    public static int[] countIP(String ip,int[] count){
        //各类ip计数
        String[] sin=ip.split("\\.");
        int first=Integer.parseInt(sin[0]);
        int second=Integer.parseInt(sin[1]);
        //私有ip
        if(isPrivateIP(ip)) count[6]++;

        //判断其他地址范围
        if (first >= 1 && first <= 126)
            count[0]++;
        else if (first >= 128 && first <= 191)
            count[1]++;
        else if (first >= 192 && first <= 223)
            count[2]++;
        else if (first >= 224 && first <= 239)
            count[3]++;
        else if (first >= 240 && first <= 255)
            count[4]++;
        return count;
    }//method end

}  
全部评论

相关推荐

Noob1024:一笔传三代,人走笔还在
点赞 评论 收藏
分享
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务