class Solution {
public String validIPAddress(String IP) {
String[] ipsp = null;
if (IP.indexOf('.') != -1) {
boolean flag = true;
if (!IP.endsWith(".")) {
ipsp = IP.split("\\.");
for (int i = 0; i < ipsp.length; i++) {
if (ipsp.length != 4) {
flag = false;
break;
}
if (ipsp[i].length() == 0 || ipsp[i].length() > 3) {
flag = false;
break;
}
if (ipsp[i].length() != 1) {
if (ipsp[i].startsWith("0")) {
flag = false;
break;
}
}
boolean temp = true;
for (int j = 0; j < ipsp[i].length(); j++) {
if (ipsp[i].charAt(j) < '0' || ipsp[i].charAt(j) > '9') {
temp = false;
break;
}
}
if (temp) {
int parse = Integer.parseInt(ipsp[i]);
if (parse < 0 || parse > 255) {
flag = false;
break;
}
} else {
flag = false;
break;
}
}
} else {
flag = false;
}
if (flag) {
return "IPv4";
} else {
return "Neither";
}
} else {
boolean flag = true;
if (!IP.endsWith(":")) {
ipsp = IP.split(":");
for (int i = 0; i < ipsp.length; i++) {
if (ipsp.length != 8) {
flag = false;
break;
}
if (ipsp[i].length() > 4 || ipsp[i].length() == 0) {
flag = false;
break;
}
for (int j = 0; j < ipsp[i].length(); j++) {
if (!((ipsp[i].charAt(j) >= '0' && ipsp[i].charAt(j) <= '9') || (ipsp[i].charAt(j) >= 'A' && ipsp[i].charAt(j) <= 'F') || (ipsp[i].charAt(j) >= 'a' && ipsp[i].charAt(j) <= 'f'))) {
flag = false;
break;
}
}
if (!flag) {
break;
}
}
} else {
flag = false;
}
if (flag) {
return "IPv6";
} else {
return "Neither";
}
}
}
}
AC图片(内存消耗有点高啊)