验证IP地址(二)
2026/7/25 19:39:11 网站建设 项目流程

解决方案

概述

最直接的方法是使用内置函数和 try/catch 结构检查 IP 地址的正确性:在 Python 中使用 ipaddress,在 Java 中使用 InetAddress 。

Python 实现

from ipaddress import ip_address, IPv6Address class Solution: def validIPAddress(self, IP: str) -> str: try: return "IPv6" if type(ip_address(IP)) is IPv6Address else "IPv4" except ValueError: return "Neither"

Java 实现

import java.net.*; class Solution { public String validIPAddress(String IP) { try { return (InetAddress.getByName(IP) instanceof Inet6Address) ? "IPv6": "IPv4"; } catch(Exception e) {} return "Neither"; } }

注意:这两个类都是引用 POSIX -兼容的 inet-addr() 解析地址。如果地址带有前导零块,可能会发生错误。

地址的组成可以使十进制,八进制(以 0 开始),或十六进制(以 0X 开始)。

例如 01.01.01.012 是有效的八进制 IP 地址。检查该地址是否有效可以在控制台运行命令 ping 01.01.01.012,八进制地址 01.01.01.012 会被转换为对应的十进制地址 1.1.1.10,因此执行 ping 命令不会出错。

该题目指出如果IPv4 地址包含前置 0则地址是无效的,但其实这不符合真实情况,不过我们仍然需要解决它。

该题目要三种主要解法:

正则表达式,该方法性能不太好;

分治法,效率最高的方法之一;

使用分治法和内置的 try/catch,将字符串转换成整数处理。使用 try/catch 不是一种好的方式,因为 try 块中的代码不会被编译器优化,所以最好不要在面试中使用。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询