题解 | #验证IP地址#

验证IP地址

https://www.nowcoder.com/practice/55fb3c68d08d46119f76ae2df7566880

import java.util.*;
import java.net.Inet6Address;
import java.net.InetAddress;

public class Solution {
    /**
      * 解决给定IP地址是IPv4还是IPv6的问题。
      *
      * @param IP 待检查的IP地址字符串。
      * @return 返回以下之一:
      *         - "IPv4" 如果给定地址是有效的IPv4地址。
      *         - "IPv6" 如果给定地址是有效的IPv6地址。
      *         - "Neither" 如果给定地址既不是有效的IPv4也不是有效的IPv6地址,或者解析过程中发生异常。
      */
    public String solve(String IP) {
        try {
            InetAddress address = InetAddress.getByName(IP);
            if (address instanceof Inet6Address) { // 检查地址是否为IPv6地址
                if (IP.indexOf("::") > 0) { // 检查IPv6地址中是否存在双冒号简写
                    return "Neither";
                }
                String[] ips = IP.split(":", 8); // 分割IPv6地址
                for (int i = 0; i < ips.length;
                        i++) { // 验证每个段是否符合长度要求
                    String ip = ips[i];
                    if (ip.length() > 4) {
                        return "Neither";
                    }
                }
                return "IPv6";
            } else { // 如果不是IPv6,则假定为IPv4
                String[] ips = IP.split("\\.", 4); // 分割IPv4地址
                for (int i = 0; i < ips.length;
                        i++) { // 验证每个段是否符合格式要求
                    String ip = ips[i];
                    if (ip.startsWith("0") &&
                            ip.length() > 1) { // 检查段是否以0开头且长度大于1
                        return "Neither";
                    }
                }
                return "IPv4";
            }
        } catch (Exception e) {
            return "Neither"; // 异常情况下返回"Neither"
        }

    }
}

全部评论

相关推荐

感谢信收割机Rain:他昨天还和我打瓦,今天咋这样发邮件😅
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务