Java 判断是否IP 或者是网段

介绍

在Java中,我们可以使用正则表达式来判断一个字符串是否是合法的IP地址或者是网段。本文将介绍如何通过编写代码来实现这个功能。

流程

下面是整个实现过程的流程图:

flowchart TD
    A[开始] --> B(获取输入字符串)
    B --> C(判断是否是IP地址)
    C --> D(判断是否是网段)
    D --> E[结束]
    C --> F[结束]

判断是否是IP地址

首先,我们需要判断输入字符串是否是一个合法的IP地址。一个合法的IP地址由四个数字组成,每个数字的取值范围是0-255,数字之间用点号"."分隔。下面是判断IP地址的代码示例:

public boolean isIpAddress(String input) {
    // 使用正则表达式进行匹配
    String pattern = "^((\\d{1,2}|1\\d{2}|2[0-4]\\d|25[0-5])\\.){3}(\\d{1,2}|1\\d{2}|2[0-4]\\d|25[0-5])$";
    return input.matches(pattern);
}

代码解释:

  • ^((\\d{1,2}|1\\d{2}|2[0-4]\\d|25[0-5])\\.){3}(\\d{1,2}|1\\d{2}|2[0-4]\\d|25[0-5])$是一个正则表达式,用于匹配IP地址的模式。
  • input.matches(pattern)用于判断输入字符串是否与模式匹配。

判断是否是网段

如果输入字符串不是一个合法的IP地址,我们还需要判断它是否是一个合法的网段。一个合法的网段由一个IP地址和一个子网掩码组成,用斜杠"/"分隔。下面是判断网段的代码示例:

public boolean isSubnet(String input) {
    // 使用正则表达式进行匹配
    String pattern = "^((\\d{1,2}|1\\d{2}|2[0-4]\\d|25[0-5])\\.){3}(\\d{1,2}|1\\d{2}|2[0-4]\\d|25[0-5])/(\\d{1,2}|1\\d{2}|2[0-4]\\d|25[0-5])$";
    return input.matches(pattern);
}

代码解释:

  • ^((\\d{1,2}|1\\d{2}|2[0-4]\\d|25[0-5])\\.){3}(\\d{1,2}|1\\d{2}|2[0-4]\\d|25[0-5])/(\\d{1,2}|1\\d{2}|2[0-4]\\d|25[0-5])$是一个正则表达式,用于匹配网段的模式。
  • input.matches(pattern)用于判断输入字符串是否与模式匹配。

完整代码示例

下面是一个完整的示例代码,包含了判断IP地址和网段的方法:

public class IpAddressUtil {

    public static void main(String[] args) {
        String input = "192.168.1.1";
        boolean isIpAddress = isIpAddress(input);
        boolean isSubnet = isSubnet(input);
        System.out.println("Is IP Address: " + isIpAddress);
        System.out.println("Is Subnet: " + isSubnet);
    }

    public static boolean isIpAddress(String input) {
        // 使用正则表达式进行匹配
        String pattern = "^((\\d{1,2}|1\\d{2}|2[0-4]\\d|25[0-5])\\.){3}(\\d{1,2}|1\\d{2}|2[0-4]\\d|25[0-5])$";
        return input.matches(pattern);
    }

    public static boolean isSubnet(String input) {
        // 使用正则表达式进行匹配
        String pattern = "^((\\d{1,2}|1\\d{2}|2[0-4]\\d|25[0-5])\\.){3}(\\d{1,2}|1\\d{2}|2[0-4]\\d|25[0-5])/(\\d{1,2}|1\\d{2}|2[0-4]\\d|25[0-5])$