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;
}
}
巨人网络成长空间 50人发布

