题解 | #验证IP地址#

验证IP地址

https://www.nowcoder.com/practice/55fb3c68d08d46119f76ae2df7566880

import java.util.*;


public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 验证IP地址
     * @param IP string字符串 一个IP地址字符串
     * @return string字符串
     */
    public String solve (String IP) {
        // write code here
        if(isIPv4(IP)){
            return "IPv4";
        }

        if(isIPv6(IP)){
            return "IPv6";
        }

        return "Neither";
    }

    public boolean isIPv4(String IP){
        // 判断有无字符.
        if(IP.indexOf('.') == -1){
            return false;
        }

        // 按.分割
        String[] s = IP.split("\\.",-1);

        // 判断分割后是否为4组
        if(s.length != 4){
            return false;
        }

        for(int i = 0; i < s.length;i++){
            // 判断分后后位数及不能有前缀0
            if(s[i].length() < 1 || s[i].length() > 3 || (s[i].length() != 1 && s[i].charAt(0) == '0')){
                return false;
            }

            // 分隔后数值比较
            int num = 0;
            for(int j = 0;j < s[i].length();j++){
                char c = s[i].charAt(j);
                if(c < '0' || c > '9'){
                    return false;
                }

                num = num * 10 + (int)(c - '0');
                if(num < 0 || num > 255){
                    return false;
                }
            }
        }
        return true;
    }

    public boolean isIPv6(String IP){
        // 判断是否有字符:
        if(IP.indexOf(":") == -1){
            return false;
        }

        // 按字符:分割
        String[] s = IP.split(":",-1);

        // 判断分割后是否为8组
        if(s.length != 8){
            return false;
        }

        for(int i = 0;i < s.length;i++){
            // 分割结果位数判断
            if(s[i].length() < 1 || s[i].length() > 4){
                return false;
            }

            // 分割结果字符比较
            for(int j = 0;j < s[i].length();j++){
                char c = s[i].charAt(j);
                boolean expr = (c >= '0' && c <= '9') || (c >= 'a' && c <= 'f') || (c >= 'A' && c <= 'F');
                if(!expr){
                    return false;
                }
            }
        }
        return true;
    }
}

全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务