java ip地址判断_Android(java)学习笔记2:IP(ipv4)地址合法性的判断

public static boolean isIpv4(String ipAddress) {

String ip = "^(1\\d{2}|2[0-4]\\d|25[0-5]|[1-9]\\d|[1-9])\\."

+ "(1\\d{2}|2[0-4]\\d|25[0-5]|[1-9]\\d|\\d)\\."

+ "(1\\d{2}|2[0-4]\\d|25[0-5]|[1-9]\\d|\\d)\\."

+ "(1\\d{2}|2[0-4]\\d|25[0-5]|[1-9]\\d|\\d)$";

Pattern pattern = Pattern.compile(ip);

Matcher matcher = pattern.matcher(ipAddress);

return matcher.matches();

}

这里用到java中正则表达式:

^表示匹配的一行的开头,$表示匹配一行的结束,|

表示逻辑或的意思(或者)

1\\d{2}:判断是1开头的三位数,也就是从100-199.

2[0-4]\\d:判断是三位数,中间那个数在0,1,2,3,4这几个数中选择,也就是数据范围在如下的范围:200-209,210-219,220-229,230-239,240-249

25[0-5]:250-255

[1-9]\\d:10-19,20-29,30-39,40-49,50-59,60-69,70-79,80-89,90-99

[1-9]:1-9

\\.:表示IP地址分隔符

其他的类似可知。

Pattern pattern =

Pattern.compile(ip);(1)Matcher matcher

= pattern.matcher(ipAddress);(2)

若想要将正则表达式视为一个对象来重复使用,就可以使用Pattern的静态方法compile()进行编译。compile()方法会返回一个Pattern实例。这个实例代表正则表达式,以后就可以重复使用这个Pattern实例的matcher()方法来返回一个Matcher实例,该实例代表符合正则式的实例。

下面是代码的实现:

package second;

import java.util.regex.Matcher;

import java.util.regex.Pattern;

public class JavaString4 {

public static void main(String[] args) {

String handset =

"192.168.1.1";

String regex =

"^(1\\d{2}|2[0-4]\\d|25[0-5]|[1-9]\\d|[1-9])\\."

+ "(1\\d{2}|2[0-4]\\d|25[0-5]|[1-9]\\d|\\d)\\."

+ "(1\\d{2}|2[0-4]\\d|25[0-5]|[1-9]\\d|\\d)\\."

+ "(1\\d{2}|2[0-4]\\d|25[0-5]|[1-9]\\d|\\d)$";

//String regex = "^([1-9] |

[1-9]\\d | 1\\d{2} | 2[0-4]\\d | 25[0-5])\\."

// +"(\\d

| [1-9]\\d | 1\\d{2} | 2[0-4]\\d | 25[0-5])\\."

// +"(\\d

| [1-9]\\d | 1\\d{2} | 2[0-4]\\d | 25[0-5])\\."

// +"(\\d

| [1-9]\\d | 1\\d{2} | 2[0-4]\\d | 25[0-5])$";

Pattern pattern =

Pattern.compile(regex);

Matcher matcher =

pattern.matcher(handset);

if(matcher.find()){ //find()方法捕获状态,对于相应的对象值,我们必须调用方法函数才能获得

System.out.println(handset

+"\n是一个合法的IP地址!");

}

else{

System.out.println(handset

+"\n是一个不合法的IP地址!");

}

// TODO 自动生成的方法存根

}

}

成功实现:

a4c26d1e5885305701be709a3d33442f.png

在编程的过程中我遇到一个疑问如下:

package second;

import java.util.regex.Matcher;

import java.util.regex.Pattern;

public class JavaString4 {

public static void main(String[] args) {

String handset = "192.168.1.1";

代码1:

String regex = "^(1\\d{2}|2[0-4]\\d|25[0-5]|[1-9]\\d|[1-9])\\."

+ "(1\\d{2}|2[0-4]\\d|25[0-5]|[1-9]\\d|\\d)\\."

+ "(1\\d{2}|2[0-4]\\d|25[0-5]|[1-9]\\d|\\d)\\."

+ "(1\\d{2}|2[0-4]\\d|25[0-5]|[1-9]\\d|\\d)$";

代码2:

Pattern pattern = Pattern.compile(regex);

Matcher matcher = pattern.matcher(handset);

if (matcher.find()) {

System.out.println(handset + "\n是一个合法的IP地址!");

} else {

System.out.println(handset + "\n是一个不合法的IP地址!");

}

// TODO 自动生成的方法存根

}

}

这里我想问问我用双斜杠注释掉的代码2和前面的代码1, 有什么本质区别的吗?

代码1我加上程序是成功的,但是我实在不明白代码2为什么就无法实现,总是显示:

192.168.1.1

是一个不合法的IP地址!

后来我在网上求助,万能的网友帮我解决了:

String regex =

"^([1-9]|[1-9]\\d|1\\d{2}|2[0-4]\\d|25[0-5])\\."

+"(\\d|[1-9]\\d|1\\d{2}|2[0-4]\\d|25[0-5])\\."

+"(\\d|[1-9]\\d|1\\d{2}|2[0-4]\\d|25[0-5])\\."

+"(\\d|[1-9]\\d|1\\d{2}|2[0-4]\\d|25[0-5])$";

把里面的空格去掉,你的表达式中有空格,所以不匹配。

后来我根据这个帮助,我修改之后果然调试成功了。

正则表达式编写的时候:不能有空格存在

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值