468. 验证IP地址

165 阅读1分钟

思路

  • 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) {// 长度不为4
            return false;
        }
        for (String str : strs) {
            if (str.length() > 3 || str.length() == 0) { // 34.2555.3.4, 54.45..4
                return false;
            }
            if (str.length() > 1 && str.charAt(0) == '0') {//以0开头, 25.056.4.4
                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) { //长度不为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;
    }

}