java代码获取ip地址类

时间:2014-11-25 23:56:04

标签: java

我写了这段代码,要求用户输入一个ip地址并使用正则表达式工作,但后来我想告诉用户哪个类是这个ip取决于范围(0-126)A类,(128- 191)b级,(192-224)c级,127是例外"循环回#34;,我不知道该怎么做,有人可以帮忙吗?

这是我的代码:

public class main {


        public static void main(String[]args){

        String IP="";
        Scanner Scr = new Scanner(System.in);
        System.out.println("Enter a valid network IP:");
        // thanks to this link http://www.mkyong.com/regular-expressions/how-to-validate-ip-address-with-regular-expression/
        String pattern = "^([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\.([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\.([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\.([01]?\\d\\d?|2[0-4]\\d|25[0-5])$";
        //String pattern = "[0-255][.][0-255][.][0-255][.][0-255]";
        boolean matches = false;
        do{

            IP = Scr.nextLine();
            matches = Pattern.matches(pattern, IP);
            if(matches==false)
                System.out.println("wrong range");
        }while(!matches);

        Scr.close();
    }
}

1 个答案:

答案 0 :(得分:2)

您正在使用的正则表达式包含capturing groups。您可以使用它们来提取第一个数字组,然后将其转换为int并使用它来决定您需要打印的内容。

您需要一个Pattern.matches对象,而不是静态Pattern方法,该对象可用于为特定字符串创建Matcher。那个可以访问捕获组。

您的代码最终可能如下所示:

    Pattern pattern = Pattern.compile("^([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\.([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\.([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\.([01]?\\d\\d?|2[0-4]\\d|25[0-5])$");
    boolean matches = false;
    do {
        IP = Scr.nextLine();
        Matcher matcher = pattern.matcher(IP);
        matches = matcher.matches();
        if (matches == false)
            System.out.println("wrong range");
        else {
            int number = Integer.parseInt(matcher.group(1));
            System.out.println("first group is " + number);
            if (number < 127)
                System.out.println("Class A");
            else ...
        ...