• LeetCode#468-验证是ipv4还是ipv6地址


    /*
    编写一个函数来验证输入的字符串是否是有效的 IPv4 或 IPv6 地址。
    
    IPv4 地址由十进制数和点来表示,每个地址包含4个十进制数,其范围为 0 - 255, 用(".")分割。比如,172.16.254.1;
    
    同时,IPv4 地址内的数不会以 0 开头。比如,地址 172.16.254.01 是不合法的。
    
    IPv6 地址由8组16进制的数字来表示,每组表示 16 比特。这些组数字通过 (":")分割。比如,  2001:0db8:85a3:0000:0000:8a2e:0370:7334 是一个有效的地址。而且,我们可以加入一些以 0 开头的数字,字母可以使用大写,也可以是小写。所以, 2001:db8:85a3:0:0:8A2E:0370:7334 也是一个有效的 IPv6 address地址 (即,忽略 0 开头,忽略大小写)。
    
    然而,我们不能因为某个组的值为 0,而使用一个空的组,以至于出现 (::) 的情况。 比如, 2001:0db8:85a3::8A2E:0370:7334 是无效的 IPv6 地址。
    
    同时,在 IPv6 地址中,多余的 0 也是不被允许的。比如, 02001:0db8:85a3:0000:0000:8a2e:0370:7334 是无效的。
    
    说明: 你可以认为给定的字符串里没有空格或者其他特殊字符。
    
    示例 1:
    
    输入: "172.16.254.1"
    
    输出: "IPv4"
    
    解释: 这是一个有效的 IPv4 地址, 所以返回 "IPv4"。
    示例 2:
    
    输入: "2001:0db8:85a3:0:0:8A2E:0370:7334"
    
    输出: "IPv6"
    
    解释: 这是一个有效的 IPv6 地址, 所以返回 "IPv6"。
    示例 3:
    
    输入: "256.256.256.256"
    
    输出: "Neither"
    
    解释: 这个地址既不是 IPv4 也不是 IPv6 地址。
    
        思路:
            先查看是要判断是ipv4还是ipv6
            接着ipv4:
                查看分割的每个是否在0-255之间;
                且开头不能是0
            接着ipv6:
    
     */
    public class p468 {
        public static String validIPAddress(String IP) {
            if(IP.length()<7)return "Neither";
            int version=0;
            for(int i=0;i< IP.length();i++){
                if(IP.charAt(i)=='.'){
                    version=4;
                    break;
                }
                if(IP.charAt(i)==':'){
                    version=6;
                    break;
                }
            }
            if(version==4){//判断是否为ipv4格式
                String str[]=IP.split("\.",-1);
                if(str.length!=4)return  "Neither";
                for(String s:str){
                    try{
                        if(s.length()!=1&&s.charAt(0)=='0')return "Neither";
                        int num=Integer.parseInt(s);
                        if(num>255||num<0){
                            return "Neither";
                        }
                    }catch (Exception e){
                        e.printStackTrace();
                        return "Neither";
                    }
                }
                return "IPv4";
            }
            else if(version==6){//判断是否为ipv6格式
                String str[]=IP.split("\:",-1);
                String ss="0123456789abcdefABCDEF";
                if(str.length!=8)return "Neither";
                for(String s:str){
                    if(s.length()>4||s.length()==0)return "Neither";
                    for(int i=0;i<s.length();i++){
                        if(ss.indexOf(s.charAt(i))==-1)return "Neither";
                    }
                }
                return "IPv6";
            }
            return "Neither";
    
        }
    
        public static void main(String[] args) {
            System.out.println(validIPAddress("192.0.0.1"));
        }
    }

    本题对split函数有了新的认识,即其后面的limt参数

    运行结果:

  • 相关阅读:
    gems gems gems
    poj 6206 Apple
    lightoj1341唯一分解定理
    lightoj1370欧拉函数
    约瑟夫环lightoj1179
    拓展欧几里得算法
    RMQ算法
    poj1502MPI Maelstrom
    poj1860Currency Exchange
    生成全排列
  • 原文地址:https://www.cnblogs.com/jifeng0902/p/13229722.html
Copyright © 2020-2023  润新知