题解 | #判断两个IP是否属于同一子网#拆分为几个小问题
判断两个IP是否属于同一子网
https://www.nowcoder.com/practice/34a597ee15eb4fa2b956f4c595f03218
import java.util.*;
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
label:
while (in.hasNextLine()) {
String subnetMask = in.nextLine();
String ip1 = in.nextLine();
String ip2 = in.nextLine();
if (isLegal(subnetMask) && ipIsLegal(ip1) && ipIsLegal(ip2)) {
String[] split = subnetMask.split("\\.");
String[] split1 = ip1.split("\\.");
String[] split2 = ip2.split("\\.");
for (int i = 0; i < 4; i++) {
int m = Integer.parseInt(split[i]);
int i1 = Integer.parseInt(split1[i]);
int i2 = Integer.parseInt(split2[i]);
if (((m & i1) ^ (m & i2)) != 0) {
System.out.println(2);
continue label;
}
}
System.out.println(0);
} else {
System.out.println(1);
}
}
}
private static boolean ipIsLegal(String ip) {
String[] split = ip.split("\\.");
if (split.length != 4) return false;
for (int i = 0; i < split.length; i++) {
int sub = Integer.parseInt(split[i]);
if (sub > 255 || sub < 0) return false;
}
return true;
}
private static boolean isLegal(String str) {
String[] split = str.split("\\.");
String subNetMask = Arrays.stream(split).map(Long::parseLong).map(Long::toBinaryString)
.map(s -> {
if (s.length() < 8)
s = "00000000".substring(s.length()) + s;
return s;
}).reduce(String::concat).get();
return subNetMask.length() == 32 && subNetMask.matches("1+0+") ;
}
}
海康威视公司福利 1351人发布