判断一个字符串是否是ip地址

本文介绍了一种IP地址验证的方法,包括IP地址的格式检查、有效性判断及分类,覆盖了公共、私有、特殊用途的IP地址范围,适用于网络管理和安全检查。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

IP的格式:(1-255).(0-255).(0-255).(0-255)

public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        String ipStr = scanner.next();

        boolean isIpLegal = isIpLegal(ipStr);
        if(isIpLegal){
            System.out.println(ipStr+"合法");
        }else{
            System.out.println(ipStr+"非法");
        }
    }
    public static boolean isIpLegal(String str){
        //检查ip是否为空
        if(str == null){
            return false;
        }
        //检查ip长度,最短x.x.x.x(7位),最长为xxx.xxx.xxx.xxx(15位)
        if(str.length()<7||str.length()>15){
            return false;
        }
        //对输入字符串的首末字符判断,如果是“.”,则是非法ip
        if(str.charAt(0)=='.'||str.charAt(str.length()-1)=='.'){
            return false;
        }
        //按"."分割字符串,并判断分割出来的个数,如果不是4个,则是非法ip
        String[] arr = str.split("\\.");
        if(arr.length!=4){
            return false;
        }
        //对分割出来的字符串进行单独判断
        for(int i=0;i<arr.length;i++){
            //如果每个字符串不是一位字符,且以'0'开头,则是非法ip,如01.02.03.004
            if(arr[i].length()>1&&arr[i].charAt(0)=='0'){
                return false;
            }
            //对每个字符串的每个字符进行逐一判断,如果不是数字0-9则是非法ip
            for(int j=0;j<arr[i].length();j++){
                if(arr[i].charAt(j)<'0'||arr[i].charAt(j)>'9'){
                    return false;
                }
            }
        }
        //对拆分的每一个字符串进行转换成数字,并判断是否在0-255
        for(int i=0;i<arr.length;i++){
            int temp = Integer.parseInt(arr[i]);
            if(i==0){
                if(temp<1||temp>255){
                    return false;
                }
            }else{
                if(temp<0||temp>255){
                    return false;
                }
            }
        }
        return true;
    }

测试用例:
等价类划分:

有效的IP地址

A类1.0.0.0-126.255.255.254
A私有10.0.0.0-10.255.255.254
B类128.0.0.0-191.255.255.254
B类私有172.16.0.0-172.31.255.254
C类192.0.0.0-223.255.255.254
C类私有192.168.0.0-192.168.255.254
windows自动分配169.254.0.0-169.254.255.2554

 

有效但不能用的IP地址

 
D224.0.0.0-239.255.255.254
E240.0.0.0-255.255.255.254
全网0.x.x.x,x.x.x.0
广播x.x.x.255
回环127.0.0.0-127.255.255.254

 

输入结果
64.11.22.33有效可用
10.12.13.14有效可用,不能直接访问公网
151.123.234.56有效可用
172.20.123.56有效可用,不能直接访问公网
192.127.23.65有效可用
192.163.114.128有效可用,不能直接访问公网
169.254.15.20有效可用,不能直接访问公网
224.1.12.3有效不可用,超过有效范围(D类)
250.11.22.33有效不可用,超过有效范围(E类)
0.200.3.4有效不可用,全网地址
64.11.22.0有效不可用,全网地址
10.12.13.255有效不可用,广播地址
127.50.60.70有效不可用,回环地址

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值