我写了这段代码,要求用户输入一个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();
}
}
答案 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 ...
...