这道题难度真的不大,关键是判断条件要列全。各种奇葩的输入,你都要考虑得到(反正我是做不到,只能考一次一次的提交找到可能出现的一些很特殊的输入,进而为这些特殊条件加一层判断)。

import java.util.*;


public class Solution {
    /**
     * 验证IP地址
     * @param IP string字符串 一个IP地址字符串
     * @return string字符串
     */
    public String solve (String IP) {
        // write code here
        
        String rs = "Neither";
        
        // 这个就是通过 IPV4 和 IPV6 分割字符的不同,大致判断它们应该归类到哪里进行判断
        // 如果是 IPV4,那么通过 "\\." 切分,那么切分出来的字符串数组长度一定大于 1
        // 注意:别忘了转义 "\\."
        String[] judgement = IP.split("\\.");
        
        // IPV4
        if (judgement.length > 1) {
            if (IP.split("\\.").length != 4) {
                return "Neither";
            }
            else {
                for (String str : IP.split("\\.")) {
                    if (!isFigure(str)) {
                        return "Neither";
                    }
                    else {
                        if (Integer.valueOf(str) < 0 || Integer.valueOf(str) > 255) {
                            return "Neither";
                        }
                        else {
                            if ((Integer.valueOf(str) + "").length() != str.length()) {
                                return "Neither";
                            }
                        }
                    }
                }
                rs = "IPv4";
            }
        }
        // IPV6
        else {
            if (IP.split(":").length != 8) {
                return "Neither";
            }
            if (IP.charAt(IP.length() - 1) == ':') {
                return "Neither";
            }
            else {
                for (String str : IP.split(":")) {
                    if (str.length() > 4) {
                        return "Neither";
                    }
                    if (isAllZeros(str)) {
                        return "Neither";
                    }
                    if (!isValid(str)) {
                        return "Neither";
                    }
                }
                rs = "IPv6";
            }
        }
        return rs;
    }
    
    // IPV4,判断某一段是否是数字,如果存在字母,那肯定不合法
    public boolean isFigure (String str) {
        boolean rs = true;
        for (char chr : str.toCharArray()) {
            if (chr < '0' || chr > '9') {
                rs = false;
                break;
            }
        }
        return rs;
    }
    
    // IPV6,判断某一段是否全是 0,如果是,那肯定不合法
    public boolean isAllZeros (String str) {
        if (str.length() == 1) {
            return false;
        }
        boolean rs = true;
        for (char chr : str.toCharArray()) {
            if (chr != '0') {
                rs = false;
                break;
            }
        }
        return rs;
    }
    
    // IPV6,判断某一段是否存在存在不在 0~9 a~f A~F 的字符,如果不在这三个范围内的字符,统一不合法
    public boolean isValid (String str) {
        boolean rs = true;
        for (char chr : str.toCharArray()) {
            if (!((chr >= 'a' && chr <= 'f') || (chr >= 'A' && chr <= 'F') || (chr >= '0' && chr <= '9'))) {
                rs = false;
                break;
            }
        }
        return rs;
    }
}