题解 | #识别有效的IP地址和掩码并进行分类统计#
识别有效的IP地址和掩码并进行分类统计
http://www.nowcoder.com/practice/de538edd6f7e4bc3a5689723a7435682
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
int countA = 0;
int countB = 0;
int countC = 0;
int countD = 0;
int countE = 0;
int wrongCount = 0;
int privateIp = 0;
Scanner sc = new Scanner(System.in);
while (sc.hasNext()) {
String path = sc.nextLine();
String[] strs = path.split("~");
String ip = strs[0];
String code = strs[1];
String[] ips = ip.split("\\.");
String[] codes = code.split("\\.");
if (ips.length != 4 || codes.length != 4) {
wrongCount++;
continue;
}
if ((Integer.parseInt(ips[0]) >= 1 && Integer.parseInt(ips[0]) <= 126)
&& (Integer.parseInt(ips[1]) >= 0 && Integer.parseInt(ips[1]) <= 255)
&& (Integer.parseInt(ips[2]) >= 0 && Integer.parseInt(ips[2]) <= 255)
&& (Integer.parseInt(ips[3]) >= 0 && Integer.parseInt(ips[3]) <= 255)) {
String binarySunbet = "";
for(int i = 0; i < 4;i++){
int num = Integer.parseInt(codes[i]);
String str = Integer.toBinaryString(num);
while(str.length() < 8){
str = "0"+str;
}
binarySunbet += str;
}
if(binarySunbet.toString().lastIndexOf("1") < binarySunbet.toString().indexOf("0")){
countA++;
if ((Integer.parseInt(ips[0]) == 10)
&& (Integer.parseInt(ips[1]) >= 0 && Integer.parseInt(ips[1]) <= 255)
&& (Integer.parseInt(ips[2]) >= 0 && Integer.parseInt(ips[2]) <= 255)
&& (Integer.parseInt(ips[3]) >= 0 && Integer.parseInt(ips[3]) <= 255)) {
privateIp++;
continue;
}
if ((Integer.parseInt(ips[0]) == 172)
&& (Integer.parseInt(ips[1]) >= 16 && Integer.parseInt(ips[1]) <= 31)
&& (Integer.parseInt(ips[2]) >= 0 && Integer.parseInt(ips[2]) <= 255)
&& (Integer.parseInt(ips[3]) >= 0 && Integer.parseInt(ips[3]) <= 255)) {
privateIp++;
continue;
}
if ((Integer.parseInt(ips[0]) == 192)
&& (Integer.parseInt(ips[1]) == 168)
&& (Integer.parseInt(ips[2]) >= 0 && Integer.parseInt(ips[2]) <= 255)
&& (Integer.parseInt(ips[3]) >= 0 && Integer.parseInt(ips[3]) <= 255)) {
privateIp++;
continue;
}
continue;
}else {
wrongCount++;
continue;
}
}
if ((Integer.parseInt(ips[0]) >= 128 && Integer.parseInt(ips[0]) <= 191)
&& (Integer.parseInt(ips[1]) >= 0 && Integer.parseInt(ips[1]) <= 255)
&& (Integer.parseInt(ips[2]) >= 0 && Integer.parseInt(ips[2]) <= 255)
&& (Integer.parseInt(ips[3]) >= 0 && Integer.parseInt(ips[3]) <= 255)) {
String binarySunbet = "";
for(int i = 0; i < 4;i++){
int num = Integer.parseInt(codes[i]);
String str = Integer.toBinaryString(num);
while(str.length() < 8){
str = "0"+str;
}
binarySunbet += str;
}
if(binarySunbet.toString().lastIndexOf("1") < binarySunbet.toString().indexOf("0")){
countB++;
if ((Integer.parseInt(ips[0]) == 10)
&& (Integer.parseInt(ips[1]) >= 0 && Integer.parseInt(ips[1]) <= 255)
&& (Integer.parseInt(ips[2]) >= 0 && Integer.parseInt(ips[2]) <= 255)
&& (Integer.parseInt(ips[3]) >= 0 && Integer.parseInt(ips[3]) <= 255)) {
privateIp++;
continue;
}
if ((Integer.parseInt(ips[0]) == 172)
&& (Integer.parseInt(ips[1]) >= 16 && Integer.parseInt(ips[1]) <= 31)
&& (Integer.parseInt(ips[2]) >= 0 && Integer.parseInt(ips[2]) <= 255)
&& (Integer.parseInt(ips[3]) >= 0 && Integer.parseInt(ips[3]) <= 255)) {
privateIp++;
continue;
}
if ((Integer.parseInt(ips[0]) == 192)
&& (Integer.parseInt(ips[1]) == 168)
&& (Integer.parseInt(ips[2]) >= 0 && Integer.parseInt(ips[2]) <= 255)
&& (Integer.parseInt(ips[3]) >= 0 && Integer.parseInt(ips[3]) <= 255)) {
privateIp++;
continue;
}
continue;
}else {
wrongCount++;
continue;
}
}
if ((Integer.parseInt(ips[0]) >= 192 && Integer.parseInt(ips[0]) <= 223)
&& (Integer.parseInt(ips[1]) >= 0 && Integer.parseInt(ips[1]) <= 255)
&& (Integer.parseInt(ips[2]) >= 0 && Integer.parseInt(ips[2]) <= 255)
&& (Integer.parseInt(ips[3]) >= 0 && Integer.parseInt(ips[3]) <= 255)) {
String binarySunbet = "";
for(int i = 0; i < 4;i++){
int num = Integer.parseInt(codes[i]);
String str = Integer.toBinaryString(num);
while(str.length() < 8){
str = "0"+str;
}
binarySunbet += str;
}
if(binarySunbet.toString().lastIndexOf("1") < binarySunbet.toString().indexOf("0")){
countC++;
if ((Integer.parseInt(ips[0]) == 10)
&& (Integer.parseInt(ips[1]) >= 0 && Integer.parseInt(ips[1]) <= 255)
&& (Integer.parseInt(ips[2]) >= 0 && Integer.parseInt(ips[2]) <= 255)
&& (Integer.parseInt(ips[3]) >= 0 && Integer.parseInt(ips[3]) <= 255)) {
privateIp++;
continue;
}
if ((Integer.parseInt(ips[0]) == 172)
&& (Integer.parseInt(ips[1]) >= 16 && Integer.parseInt(ips[1]) <= 31)
&& (Integer.parseInt(ips[2]) >= 0 && Integer.parseInt(ips[2]) <= 255)
&& (Integer.parseInt(ips[3]) >= 0 && Integer.parseInt(ips[3]) <= 255)) {
privateIp++;
continue;
}
if ((Integer.parseInt(ips[0]) == 192)
&& (Integer.parseInt(ips[1]) == 168)
&& (Integer.parseInt(ips[2]) >= 0 && Integer.parseInt(ips[2]) <= 255)
&& (Integer.parseInt(ips[3]) >= 0 && Integer.parseInt(ips[3]) <= 255)) {
privateIp++;
continue;
}
continue;
}else {
wrongCount++;
continue;
}
}
if ((Integer.parseInt(ips[0]) >= 224 && Integer.parseInt(ips[0]) <= 239)
&& (Integer.parseInt(ips[1]) >= 0 && Integer.parseInt(ips[1]) <= 255)
&& (Integer.parseInt(ips[2]) >= 0 && Integer.parseInt(ips[2]) <= 255)
&& (Integer.parseInt(ips[3]) >= 0 && Integer.parseInt(ips[3]) <= 255)) {
String binarySunbet = "";
for(int i = 0; i < 4;i++){
int num = Integer.parseInt(codes[i]);
String str = Integer.toBinaryString(num);
while(str.length() < 8){
str = "0"+str;
}
binarySunbet += str;
}
if(binarySunbet.toString().lastIndexOf("1") < binarySunbet.toString().indexOf("0")){
countD++;
if ((Integer.parseInt(ips[0]) == 10)
&& (Integer.parseInt(ips[1]) >= 0 && Integer.parseInt(ips[1]) <= 255)
&& (Integer.parseInt(ips[2]) >= 0 && Integer.parseInt(ips[2]) <= 255)
&& (Integer.parseInt(ips[3]) >= 0 && Integer.parseInt(ips[3]) <= 255)) {
privateIp++;
continue;
}
if ((Integer.parseInt(ips[0]) == 172)
&& (Integer.parseInt(ips[1]) >= 16 && Integer.parseInt(ips[1]) <= 31)
&& (Integer.parseInt(ips[2]) >= 0 && Integer.parseInt(ips[2]) <= 255)
&& (Integer.parseInt(ips[3]) >= 0 && Integer.parseInt(ips[3]) <= 255)) {
privateIp++;
continue;
}
if ((Integer.parseInt(ips[0]) == 192)
&& (Integer.parseInt(ips[1]) == 168)
&& (Integer.parseInt(ips[2]) >= 0 && Integer.parseInt(ips[2]) <= 255)
&& (Integer.parseInt(ips[3]) >= 0 && Integer.parseInt(ips[3]) <= 255)) {
privateIp++;
continue;
}
continue;
}else {
wrongCount++;
continue;
}
}
if ((Integer.parseInt(ips[0]) >= 240 && Integer.parseInt(ips[0]) <= 255)
&& (Integer.parseInt(ips[1]) >= 0 && Integer.parseInt(ips[1]) <= 255)
&& (Integer.parseInt(ips[2]) >= 0 && Integer.parseInt(ips[2]) <= 255)
&& (Integer.parseInt(ips[3]) >= 0 && Integer.parseInt(ips[3]) <= 255)) {
String binarySunbet = "";
for(int i = 0; i < 4;i++){
int num = Integer.parseInt(codes[i]);
String str = Integer.toBinaryString(num);
while(str.length() < 8){
str = "0"+str;
}
binarySunbet += str;
}
if(binarySunbet.toString().lastIndexOf("1") < binarySunbet.toString().indexOf("0")){
countE++;
if ((Integer.parseInt(ips[0]) == 10)
&& (Integer.parseInt(ips[1]) >= 0 && Integer.parseInt(ips[1]) <= 255)
&& (Integer.parseInt(ips[2]) >= 0 && Integer.parseInt(ips[2]) <= 255)
&& (Integer.parseInt(ips[3]) >= 0 && Integer.parseInt(ips[3]) <= 255)) {
privateIp++;
continue;
}
if ((Integer.parseInt(ips[0]) == 172)
&& (Integer.parseInt(ips[1]) >= 16 && Integer.parseInt(ips[1]) <= 31)
&& (Integer.parseInt(ips[2]) >= 0 && Integer.parseInt(ips[2]) <= 255)
&& (Integer.parseInt(ips[3]) >= 0 && Integer.parseInt(ips[3]) <= 255)) {
privateIp++;
continue;
}
if ((Integer.parseInt(ips[0]) == 192)
&& (Integer.parseInt(ips[1]) == 168)
&& (Integer.parseInt(ips[2]) >= 0 && Integer.parseInt(ips[2]) <= 255)
&& (Integer.parseInt(ips[3]) >= 0 && Integer.parseInt(ips[3]) <= 255)) {
privateIp++;
continue;
}
continue;
}else {
wrongCount++;
continue;
}
}
if ((Integer.parseInt(ips[0]) == 10)
&& (Integer.parseInt(ips[1]) >= 0 && Integer.parseInt(ips[1]) <= 255)
&& (Integer.parseInt(ips[2]) >= 0 && Integer.parseInt(ips[2]) <= 255)
&& (Integer.parseInt(ips[3]) >= 0 && Integer.parseInt(ips[3]) <= 255)) {
String binarySunbet = "";
for(int i = 0; i < 4;i++){
int num = Integer.parseInt(codes[i]);
String str = Integer.toBinaryString(num);
while(str.length() < 8){
str = "0"+str;
}
binarySunbet += str;
}
if(binarySunbet.toString().lastIndexOf("1") < binarySunbet.toString().indexOf("0")){
privateIp++;
continue;
}else {
wrongCount++;
continue;
}
}
if ((Integer.parseInt(ips[0]) == 172)
&& (Integer.parseInt(ips[1]) >= 16 && Integer.parseInt(ips[1]) <= 31)
&& (Integer.parseInt(ips[2]) >= 0 && Integer.parseInt(ips[2]) <= 255)
&& (Integer.parseInt(ips[3]) >= 0 && Integer.parseInt(ips[3]) <= 255)) {
String binarySunbet = "";
for(int i = 0; i < 4;i++){
int num = Integer.parseInt(codes[i]);
String str = Integer.toBinaryString(num);
while(str.length() < 8){
str = "0"+str;
}
binarySunbet += str;
}
if(binarySunbet.toString().lastIndexOf("1") < binarySunbet.toString().indexOf("0")){
privateIp++;
continue;
}else {
wrongCount++;
continue;
}
}
if ((Integer.parseInt(ips[0]) == 192)
&& (Integer.parseInt(ips[1]) == 168)
&& (Integer.parseInt(ips[2]) >= 0 && Integer.parseInt(ips[2]) <= 255)
&& (Integer.parseInt(ips[3]) >= 0 && Integer.parseInt(ips[3]) <= 255)) {
String binarySunbet = "";
for(int i = 0; i < 4;i++){
int num = Integer.parseInt(codes[i]);
String str = Integer.toBinaryString(num);
while(str.length() < 8){
str = "0"+str;
}
binarySunbet += str;
}
if(binarySunbet.toString().lastIndexOf("1") < binarySunbet.toString().indexOf("0")){
privateIp++;
continue;
}else {
wrongCount++;
continue;
}
}
if ((Integer.parseInt(ips[0]) == 0) || (Integer.parseInt(ips[0]) == 127)) {
//不做处理
continue;
}
wrongCount++;
}
System.out.println(countA + " " + countB + " " + countC + " " + countD + " " + countE + " " + wrongCount + " " + privateIp);
}
}