题解 | #验证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" } } }