题解 | #识别有效的IP地址和掩码并进行分类统计#
识别有效的IP地址和掩码并进行分类统计
https://www.nowcoder.com/practice/de538edd6f7e4bc3a5689723a7435682
import java.util.*; // 注意类名必须为 Main, 不要有任何 package xxx 信息 public class Main { public static void main(String[] args) { int A,B,C,D,E,error,pri; A=B=C=D=E=error=pri=0; Scanner in = new Scanner(System.in); // 注意 hasNext 和 hasNextLine 的区别 w:while (in.hasNextLine()) { // 注意 while 处理多个 case String line = in.nextLine(); String[] split = line.split("~"); String ip = split[0]; String webCode = split[1]; String[] ips = ip.split("\\."); String[] webcodes = webCode.split("\\."); int ip1,ip2,ip3,ip4; int wc1,wc2,wc3,wc4; try { ip1 = Integer.valueOf(ips[0]); ip2 = Integer.valueOf(ips[1]); ip3 = Integer.valueOf(ips[2]); ip4 = Integer.valueOf(ips[3]); wc1 = Integer.valueOf(webcodes[0]); wc2 = Integer.valueOf(webcodes[1]); wc3 = Integer.valueOf(webcodes[2]); wc4 = Integer.valueOf(webcodes[3]); } catch (Exception e){ error++; continue; } // 非法 if (ip1<0||ip1>255||ip2<0||ip2>255||ip3<0||ip3>255||ip4<0||ip4>255 || wc1<0||wc1>255||wc2<0||wc2>255||wc3<0||wc3>255||wc4<0||wc4>255) { error++; continue; } // 忽略 if (ip1==0 || ip1 == 127) continue; // 子网掩码非法 int wc = (wc1 << 24) + (wc2 << 16) + (wc3 << 8) + wc4; String binStr = Integer.toBinaryString(wc); int bitCount = Integer.bitCount(wc); if (bitCount == 0 || bitCount == 32) { error++; continue; } for (int i = 0; i < bitCount; i++) { if ('0' == (binStr.charAt(i))) { error++; continue w; } } // 分类 if (ip1 >= 1 && ip1 <=126) { A++; } else if (ip1<=191) { B++; } else if (ip1<=223) { C++; } else if (ip1<=239) { D++; } else { E++; } // 私有 if (ip1 == 10 || (ip1 == 172 && ip2 >= 16 && ip2 <= 31) || (ip1 == 192 && ip2 == 168)) { pri++; } } System.out.print(A); System.out.print(" "); System.out.print(B); System.out.print(" "); System.out.print(C); System.out.print(" "); System.out.print(D); System.out.print(" "); System.out.print(E); System.out.print(" "); System.out.print(error); System.out.print(" "); System.out.print(pri); System.out.println(); } }