【字符串分割】验证IP地址


求解代码

java 复制代码
public String solve(String IP) {
        // 校验是否为IPv4
        if (IP.indexOf(".") != -1) {
            // 按.分割,.是正则通配符,需转义为\\.
            String[] strs = IP.split("\\.");
            // IPv4核心规则:必须被.分割为4段
            if (strs.length != 4) {
                return "Neither";
            }
            // 校验IPv4
            for (int i = 0; i < strs.length; i++) {
                // 提前校验段非空,避免空串导致charAt/parseInt运行时异常
                if (strs[i].isEmpty()) {
                    return "Neither";
                }
                // 当前段仅能包含数字0-9
                for (char c : strs[i].toCharArray()) {
                    if (!(c >= '0' && c <= '9')) {
                        return "Neither";
                    }
                }
                // 数值≤255 且 无前导零(唯一例外:段本身是0,即长度1的0)
                if (Integer.parseInt(strs[i]) > 255 || (strs[i].charAt(0) == '0' && strs[i].length() > 1)) {
                    return "Neither";
                }
            }
            // 所有IPv4规则校验通过
            return "IPv4";
        }
        // 校验是否为IPv6
        else if (IP.indexOf(":") != -1) {
            // IPv6首尾不能为:
            if (IP.charAt(0) == ':' || IP.charAt(IP.length() - 1) == ':') {
                return "Neither";
            }
            // 按:分割IPv6字符串
            String[] strs = IP.split(":");
            // IPv6必须被:分割为8段
            if (strs.length != 8) {
                return "Neither";
            }
            // 校验IPv6
            for (int i = 0; i < strs.length; i++) {
                // 当前段仅能包含十六进制字符
                for (char c : strs[i].toCharArray()) {
                    if (!(c >= '0' && c <= '9') && !(c >= 'a' && c <= 'f') && !(c >= 'A' && c <= 'F')) {
                        return "Neither";
                    }
                }
                // 段不能为空 且 长度≤4
                if (strs[i].equals("") || strs[i].length() > 4) {
                    return "Neither";
                }
            }
            // 所有IPv6规则校验通过
            return "IPv6";
        }
        // 既不包含.也不包含:,直接判定为非法IP
        else {
            return "Neither";
        }
    }

小贴士

题目意思不是太难理解,就是可能有点繁琐。

理清思路应该问题不大。

相关推荐
Agent产品评测局2 分钟前
企业发票管理自动化落地,验真归档全流程实现方法:2026企业级智能体选型与实测指南
运维·网络·人工智能·ai·chatgpt·自动化
OPHKVPS7 分钟前
WebRAT恶意软件借GitHub伪造漏洞利用程序传播
网络·安全·github
yj_xqj20 分钟前
Linux network启动报错 && nmcli 的使用
linux·运维·服务器
程序猿编码27 分钟前
eBPF代理:让SSH进程“溯源”,找到背后的客户端IP
linux·tcp/ip·ssh·ebpf
Shepherd061932 分钟前
【IT 实战】解决 TP-Link USB 无线网卡在 Linux/PVE 下识别为存储设备的问题
linux·运维·服务器
开开心心_Every1 小时前
免费轻量电子书阅读器,多系统记笔记听书
linux·运维·服务器·神经网络·安全·机器学习·pdf
存储服务专家StorageExpert1 小时前
DELL EMC isilon/PowerScale 存储的健康检查方法
linux·运维·服务器·netapp存储·emc存储
熊文豪1 小时前
当系统在后台偷偷“记账“:KES 性能观测体系深度解析
linux·运维·服务器·数据库
哦豁灬1 小时前
ThinkPad X220 安装 Arch Linux 完美指南
linux·服务器·thinkpad·arch linux
杨云龙UP2 小时前
MySQL慢查询日志暴涨导致磁盘告警:slow query log膨胀至397G的生产故障排查:清理、参数优化
linux·运维·服务器·数据库·mysql