小学生都能看懂的题解 | #验证IP地址#

方案解释

  1. 目标:这个程序是用来判断一个字符串是否是有效的IP地址。IP地址有两种类型:IPv4和IPv6。

  2. IPv4地址

    • 由四个数字组成,每个数字用点(.)分开。
    • 每个数字的范围是0到255,比如172.16.254.1。
    • 不能以0开头(例如,172.16.254.01是不合法的)。
  3. IPv6地址

    • 由八组16进制数字组成,每组用冒号(:)分开。
    • 每组可以有1到4个字符,比如2001:0db8:85a3:0:0:8A2E:0370:7334。
    • 最后一组不能是空的。
  4. 返回值:程序会返回“IPv4”或“IPv6”表示地址的类型,或者“Neither”表示这不是一个有效的IP地址。

代码解释

public class IPAddressValidator {

这行代码定义了一个叫 IPAddressValidator 的类,所有的代码都在这个类里面。

public static String validateIPAddress(String ip) {

这个方法 validateIPAddress 接受一个字符串(即IP地址),并返回它的类型。

if (isValidIPv4(ip)) {
    return "IPv4";
} else if (isValidIPv6(ip)) {
    return "IPv6";
} else {
    return "Neither";
}

这段代码检查这个IP地址是否是有效的IPv4或IPv6地址。如果是,返回对应的字符串;如果都不是,就返回“Neither”。

IPv4验证方法

private static boolean isValidIPv4(String ip) {
    String[] parts = ip.split("\\.");
    if (parts.length != 4) return false;

这个方法用点(.)把字符串分成四部分。如果不是四部分,就返回 false(表示不合法)。

for (String part : parts) {
    if (part.length() == 0 || part.length() > 3) return false;
    if (part.charAt(0) == '0' && part.length() > 1) return false;

接下来的部分检查每个部分的长度。如果长度为0或者大于3,就返回 false。同时,如果数字以0开头且长度大于1,也返回 false

try {
    int num = Integer.parseInt(part);
    if (num < 0 || num > 255) return false;
} catch (NumberFormatException e) {
    return false;
}

然后,它尝试把字符串转成数字,检查这个数字是否在0到255之间。如果不是,返回 false

IPv6验证方法

private static boolean isValidIPv6(String ip) {
    String[] parts = ip.split(":");
    if (parts.length != 8) return false;

这个方法用冒号(:)把字符串分成八部分。如果不是八部分,返回 false

if (ip.endsWith(":")) return false;

检查这个IP地址的最后部分是不是空的。如果是,返回 false

for (String part : parts) {
    if (part.length() == 0 || part.length() > 4) return false;
    if (!part.matches("[0-9a-fA-F]{1,4}")) return false;
}

然后,检查每一部分的长度和内容。如果长度为0或大于4,或者不包含合法的16进制字符(0-9和a-f),也返回 false

完整代码

public class IPAddressValidator {

    public static String validateIPAddress(String ip) {
        if (isValidIPv4(ip)) {
            return "IPv4";
        } else if (isValidIPv6(ip)) {
            return "IPv6";
        } else {
            return "Neither";
        }
    }

    private static boolean isValidIPv4(String ip) {
        String[] parts = ip.split("\\.");
        if (parts.length != 4) return false;

        for (String part : parts) {
            if (part.length() == 0 || part.length() > 3) return false;
            if (part.charAt(0) == '0' && part.length() > 1) return false;
            try {
                int num = Integer.parseInt(part);
                if (num < 0 || num > 255) return false;
            } catch (NumberFormatException e) {
                return false;
            }
        }
        return true;
    }

    private static boolean isValidIPv6(String ip) {
        String[] parts = ip.split(":");
        if (parts.length != 8) return false;
        
        // Check if the last part is empty
        if (ip.endsWith(":")) return false;

        for (String part : parts) {
            if (part.length() == 0 || part.length() > 4) return false;
            if (!part.matches("[0-9a-fA-F]{1,4}")) return false;
        }
        return true;
    }


希望这篇文章对你有帮助👍。

#题解#
小学生都能看懂的算法 文章被收录于专栏

主要面向小白的算法文章。以小学生都能看懂为目标而编写,顺便巩固下自己。

全部评论

相关推荐

感性的干饭人在线蹲牛友:🐮 应该是在嘉定这边叭,禾赛大楼挺好看的
点赞 评论 收藏
分享
头像
11-09 17:30
门头沟学院 Java
TYUT太摆金星:我也是,好几个华为的社招找我了
点赞 评论 收藏
分享
点赞 1 评论
分享
牛客网
牛客企业服务