
思路
- 用str.split()
Character.isDigit()
Character.isUpperCase(), Character.isLowerCase()
Integer.parseInt()
class Solution {
public String validIPAddress(String IP) {
if (isIPv4(IP)) {
return "IPv4";
} else if (isIPv6(IP)) {
return "IPv6";
} else {
return "Neither";
}
}
public boolean isIPv4(String s) {
if (s.indexOf(":") != -1 || s.indexOf(".") == -1) {
return false;
}
if (s.charAt(s.length() - 1) == ':' || s.charAt(s.length() - 1) == '.') {
return false;
}
String[] strs = s.split("\\.");
if (strs.length != 4) {
return false;
}
for (String str : strs) {
if (str.length() > 3 || str.length() == 0) {
return false;
}
if (str.length() > 1 && str.charAt(0) == '0') {
return false;
}
for (int i = 0; i < str.length(); i++) {
if (!Character.isDigit(str.charAt(i))) {
return false;
}
}
int val = Integer.parseInt(str);
if (val > 255 || val < 0) {
return false;
}
}
return true;
}
public boolean isIPv6(String s) {
if (s.indexOf(".") != -1 || s.indexOf(":") == -1) {
return false;
}
if (s.charAt(s.length() - 1) == ':' || s.charAt(s.length() - 1) == '.') {
return false;
}
String[] strs = s.split(":");
if (strs.length != 8) {
return false;
}
for (String str : strs) {
if (str.length() > 4 || str.length() == 0) {
return false;
}
for (int i = 0; i < str.length(); i++) {
char c = str.charAt(i);
if ((Character.isUpperCase(c) && c > 'F' )|| (Character.isLowerCase(c) && c > 'f')) {
return false;
}
}
}
return true;
}
}