26:IPMaskCheck识别有效的ip地址和掩码并分类统计
题目描述
请解析IP地址和对应的掩码,进行分类识别。要求按照A/B/C/D/E类地址归类,不合法的地址和掩码单独归类。
所有的IP地址划分为 A,B,C,D,E五类
A类地址1.0.0.0~126.255.255.255;
B类地址128.0.0.0~191.255.255.255;
C类地址192.0.0.0~223.255.255.255;
D类地址224.0.0.0~239.255.255.255;
E类地址240.0.0.0~255.255.255.255
私网IP范围是:
10.0.0.0~10.255.255.255
172.16.0.0~172.31.255.255
192.168.0.0~192.168.255.255
子网掩码为前面是连续的1,然后全是0。(例如:255.255.255.32就是一个非法的掩码)
输入描述:多行字符串。每行一个IP地址和掩码,用~隔开。
输出描述:统计A、B、C、D、E、错误IP地址或错误掩码、私有IP的个数,之间以空格隔开。
输入例子:
10.70.44.68~255.254.255.0
1.0.0.1~255.0.0.0
192.168.0.2~255.255.255.0
19..0.~255.255.255.0
输出例子:
1 0 1 0 0 2 1
# 1. Mask 255.255.255.255 , 0.0.0.0 为非法。
# 2. IP和Mask必须同时正确,才能被分类到A, B, C, D, E以及私有。
# 3. IP和Mask同时错误时,只算一次错误
# 4. 注意0.*.*.*以及127.*.*.*不属于任何类别。
思路:
每一行数据有一个ip和一个掩码,先判断两个的长度,不符合直接over;
下来看掩码,掩码不符合,直接错误的+1,后边不用执行判断IP,所以设置flag(如何判断掩码是否符合)
掩码符合,判断IP,根据区间断归类统计,每个区间段之后继续判断是不是私网IP
1 import java.util.Scanner; 2 3 /*# 1. Mask 255.255.255.255 , 0.0.0.0 为非法。 4 # 2. IP和Mask必须同时正确,才能被分类到A, B, C, D, E以及私有。 5 # 3. IP和Mask同时错误时,只算一次错误 6 # 4. 注意0.*.*.*以及127.*.*.*不属于任何类别。 7 */ 8 /*题目描述 9 请解析IP地址和对应的掩码,进行分类识别。要求按照A/B/C/D/E类地址归类,不合法的地址和掩码单独归类。 10 所有的IP地址划分为 A,B,C,D,E五类 11 A类地址1.0.0.0~126.255.255.255; 12 B类地址128.0.0.0~191.255.255.255; 13 C类地址192.0.0.0~223.255.255.255; 14 D类地址224.0.0.0~239.255.255.255; 15 E类地址240.0.0.0~255.255.255.255 16 私网IP范围是: 17 10.0.0.0~10.255.255.255 18 172.16.0.0~172.31.255.255 19 192.168.0.0~192.168.255.255 20 子网掩码为前面是连续的1,然后全是0。(例如:255.255.255.32就是一个非法的掩码) 21 输入描述:多行字符串。每行一个IP地址和掩码,用~隔开。 22 输出描述:统计A、B、C、D、E、错误IP地址或错误掩码、私有IP的个数,之间以空格隔开。 23 输入例子: 24 10.70.44.68~255.254.255.0 25 1.0.0.1~255.0.0.0 26 192.168.0.2~255.255.255.0 27 19..0.~255.255.255.0 28 输出例子: 29 1 0 1 0 0 2 1*/ 30 public class IPMaskCheck { 31 public static void main(String[] args){ 32 Scanner in=new Scanner(System.in); 33 int a=0,b=0,c=0,d=0,e=0,f=0,g=0; 34 while(in.hasNextLine()){ 35 int flag = 0; 36 String[] input = in.nextLine().split("~"); 37 String[] ipString = input[0].split("\\."); 38 String[] maskString = input[1].split("\\."); 39 //MaskCheck 40 if(ipString.length!=4 || maskString.length!=4) 41 { 42 f++; 43 continue; 44 } 45 //IP Check 46 for(int i =0;i<4;i++) 47 { 48 if(Integer.parseInt(ipString[i]) <0 || Integer.parseInt(ipString[i])>255) 49 { 50 f++; 51 break; 52 } 53 } 54 int ip1 = Integer.parseInt(ipString[0]); 55 int ip2 = Integer.parseInt(ipString[1]); 56 if(ip1>=1 && ip1<=126) 57 { 58 a++; 59 if(ip1==10)g++; 60 } 61 else if(ip1>=128 && ip1<=191) 62 { 63 b++; 64 if(ip1==172 && ip2<=31 && ip2>=16)g++; 65 } 66 else if(ip1>=192 && ip1<=223) 67 { 68 c++; 69 if(ip1==192 && ip2==168)g++; 70 } 71 else if(ip1>=224 && ip1<=239) 72 { 73 d++; 74 } 75 else { 76 e++;//240-255 77 } 78 System.out.println(a+" "+b+" "+c+" "+d+" "+e+" "+f+" "+g); 79 } 80 } 81 }