题解 | #验证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
        int lg = ip.length();
        if(lg<=15){
            return checkIPv4(ip)?"IPv4":"Neither";
        }else{
             return checkIPv6(ip)?"IPv6":"Neither";
        }
    }
    public boolean checkIPv4(String ip){
        String[] str = ip.split("\\.");
        if(str.length !=4) return false;
         for(String s : str){
            
            if(!checkNum4(s.toCharArray(),0)||String.valueOf(Integer.valueOf(s)).length()<s.length())return false;
        }
        return Integer.valueOf(str[0]) <= 255 && Integer.valueOf(str[1]) <= 255 && Integer.valueOf(str[2]) <= 255 && Integer.valueOf(str[3]) <= 255;
    }
    public boolean checkIPv6(String ip){
        char[] w= ip.toCharArray();
        int count=0;
        for(char c : w)if(c == ':')count++;
        if(count>7)return false;
        String[] str = ip.split(":");
        if(str.length !=8) return false;
        for(String s : str){
            if(checkNum6(s.toCharArray(),0)==false||(!s.equals("0")&&s.length()!=4))return false;
        }
        return true;
    }
    public boolean checkNum6(char[] num,int i){
        if(i>=num.length)return true;
        if(num.length>4 || (Character.isDigit(num[i])==false&&Character.isLetter(num[i])==false))return false;
        //&& (?(?true:false):(num[i]<='F'?true:false))
        if(Character.isLowerCase(num[i]) && num[i] >'f') return false;
        if(Character.isUpperCase(num[i]) && num[i] > 'F')return false;
        return (Character.isDigit(num[i])||Character.isLetter(num[i]))&&checkNum6(num,i+1);
        
    }
    public boolean checkNum4(char[] num,int i){
        if(i>=num.length)return true;
        if(num.length>3 || Character.isDigit(num[i])==false)return false;
        return Character.isDigit(num[i]) && checkNum4(num,i+1);
    }
}


全部评论

相关推荐

10-09 00:50
已编辑
长江大学 算法工程师
不期而遇的夏天:1.同学你面试评价不错,概率很大,请耐心等待;2.你的排名比较靠前,不要担心,耐心等待;3.问题不大,正在审批,不要着急签其他公司,等等我们!4.预计9月中下旬,安心过节;5.下周会有结果,请耐心等待下;6.可能国庆节前后,一有结果我马上通知你;7.预计10月中旬,再坚持一下;8.正在走流程,就这两天了;9.同学,结果我也不知道,你如果查到了也告诉我一声;10.同学你出线不明朗,建议签其他公司保底!11.同学你找了哪些公司,我也在找工作。
点赞 评论 收藏
分享
Java抽象带篮子:难蚌,点进图片上面就是我的大头😆
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务