LeetCode第468题 - 验证IP地址

题目

编写一个函数来验证输入的字符串是否是有效的 IPv4 或 IPv6 地址。

IPv4 地址由十进制数和点来表示,每个地址包含4个十进制数,其范围为 0 - 255, 用(“.”)分割。比如,172.16.254.1;

同时,IPv4 地址内的数不会以 0 开头。比如,地址 172.16.254.01 是不合法的。

IPv6 地址由8组16进制的数字来表示,每组表示 16 比特。这些组数字通过 (“:”)分割。比如, 2001:0db8:85a3:0000:0000:8a2e:0370:7334 是一个有效的地址。而且,我们可以加入一些以 0 开头的数字,字母可以使用大写,也可以是小写。所以, 2001:db8:85a3:0:0:8A2E:0370:7334 也是一个有效的 IPv6 address地址 (即,忽略 0 开头,忽略大小写)。

然而,我们不能因为某个组的值为 0,而使用一个空的组,以至于出现 (:😃 的情况。 比如, 2001:0db8:85a3::8A2E:0370:7334 是无效的 IPv6 地址。

同时,在 IPv6 地址中,多余的 0 也是不被允许的。比如, 02001:0db8:85a3:0000:0000:8a2e:0370:7334 是无效的。

说明: 你可以认为给定的字符串里没有空格或者其他特殊字符。

示例 1:

输入: “172.16.254.1”

输出: “IPv4”

解释: 这是一个有效的 IPv4 地址, 所以返回 “IPv4”。
示例 2:

输入: “2001:0db8:85a3:0:0:8A2E:0370:7334”

输出: “IPv6”

解释: 这是一个有效的 IPv6 地址, 所以返回 “IPv6”。
示例 3:

输入: “256.256.256.256”

输出: “Neither”

解释: 这个地址既不是 IPv4 也不是 IPv6 地址。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/validate-ip-address
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

解答

class Solution {
   
    public String validIPAddress(String IP) {
   
        if (IP == null || IP.isEmpty()) {
   
    		return "Neither";
    	}
    	
    	String value1 = IP.trim();
    	if (value1.isEmpty()) {
   
    		return "Neither"; 
    	}
    	
    	java.util.regex.Pattern pipv4 = java.util.regex.Pattern.compile("((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\.){3}(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])");
    	java.util.regex.Matcher matcher = null;
    	
    	matcher = pipv4.matcher(IP);
    	
    	if (matcher.matches()) {
   
    		return "IPv4";
    	}
    	
    	String value2 = IP.toLowerCase(java.util.Locale.US);
    	java.util.regex.Pattern pipv6 = java.util.regex.Pattern.compile("([0-9a-f]{1,4}(\\:)){7}([0-9a-f]{1,4})");
    	matcher = pipv6.matcher(value2);
    	
    	if (matcher.matches()) {
   
    		return "IPv6";
    	}
    	
        return "Neither";
    }
}

要点
使用正则表达式,本题非常容易。

准备的用例,如下

	@Test
	public void test101() {
   
		assertEquals("Neither", new L468().validIPAddress(null));
		assertEquals("Neither", new L468().validIPAddress(""));
		assertEquals("Neither", new L468().validIPAddress("		"));
		
		assertEquals("IPv4", new L468().validIPAddress("172.16.254.1"));
		assertEquals("IPv4", new L468().validIPAddress("0.0.0.0"));
		assertEquals("IPv4", new L468().validIPAddress("255.255.255.255"));
		assertEquals("IPv4", new L468().validIPAddress("0.255.255.255"));
		
		assertEquals("Neither", new L468().validIPAddress("256.256.256.256"));
		assertEquals("Neither", new L468().validIPAddress("-1.255.255.255"));
		assertEquals("Neither", new L468().validIPAddress("1.255.255.01"));
		assertEquals("Neither", new L468().validIPAddress("1.255.255"));
		
	}
	@Test
	public void test102() {
   
		assertEquals("Neither", new L468().validIPAddress("2001:0db8:85a3::8A2E:0370:7334"));
		assertEquals("Neither", new L468().validIPAddress("2001:0db8:85a3:0000:0000:8a2e:0370"));
		assertEquals("IPv6", new L468().validIPAddress("2001:0db8:85a3:0:0:8A2E:0370:7334"));
		assertEquals("IPv6", new L468().validIPAddress("0:0db8:85a3:0:0:8A2E:0370:7334"));
		assertEquals("IPv6", new L468().validIPAddress("2001:db8:85a3:0:0:8A2E:0370:7334"));
		assertEquals("IPv6", new L468().validIPAddress("2001:0db8:85a3:0000:0000:8a2e:0370:7334"));
	}

相关推荐

  1. LeetCode468 - 验证IP地址

    2024-01-28 08:32:01       65 阅读
  2. leetcode468. 验证IP地址

    2024-01-28 08:32:01       57 阅读
  3. 验证回文串算法(leetcode125)

    2024-01-28 08:32:01       60 阅读
  4. leetcode:93. 复原 IP 地址

    2024-01-28 08:32:01       49 阅读
  5. leetcode 93. 复原 IP 地址

    2024-01-28 08:32:01       70 阅读
  6. LeetCode 93. 复原 IP 地址

    2024-01-28 08:32:01       56 阅读
  7. LeetCode 93. 复原 IP 地址

    2024-01-28 08:32:01       41 阅读
  8. leetcode93.复原IP地址

    2024-01-28 08:32:01       40 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-01-28 08:32:01       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-01-28 08:32:01       106 阅读
  3. 在Django里面运行非项目文件

    2024-01-28 08:32:01       87 阅读
  4. Python语言-面向对象

    2024-01-28 08:32:01       96 阅读

热门阅读

  1. vue 前端给接口传file对象需要注意的问题

    2024-01-28 08:32:01       54 阅读
  2. K8S系列文章之 docker配置远程访问

    2024-01-28 08:32:01       61 阅读
  3. springboot2.2.9整合kafka之KafkaListener实现原理

    2024-01-28 08:32:01       42 阅读
  4. 力扣19-删除链表中倒数第N个节点

    2024-01-28 08:32:01       57 阅读
  5. 【leetcode100-069到073】【栈】五题合集

    2024-01-28 08:32:01       52 阅读
  6. 每日OJ题_算法_二分查找⑧_力扣LCR 173. 点名

    2024-01-28 08:32:01       56 阅读
  7. 【代码分享】

    2024-01-28 08:32:01       45 阅读