java 判断字符串是ip_判断一个字符串是否是ip地址的实现方法

最近在学习java,研究一些算法,找些联系题,自己去下手试试。这里记录下学习历程,也增强自己的记忆。初学者,见笑了。从开始判断一个字符串是不是正规ipv4的地址开始练习吧,初步代码如下:

public class isIpv4{

public String cutblank(String str){

//如果字符串前有空格

while(str.startsWith(""))

{

str=  str.substring(1,str.length()).trim();

}

//去掉字符串后的空格

while(str.endsWith(""))

{

str= str.substring(0,str.length()-1).trim();

System.out.println(str);

}

return str;

}

public boolean isipv4(String ip){

//判断是否是一个ip地址

boolean a=false;

ip = this.cutblank(ip);

boolean flag =ip.matches("\\d{1,3}\\.d{1,3}\\.d{1,3}\\.d{1,3}");

if(flag)

{

String s[] = ip.split("\\.");

int i1= Integer.parseInt(s[0]);

int i2= Integer.parseInt(s[1]);

System.out.println(i2);

int i3= Integer.parseInt(s[2]);

int i4= Integer.parseInt(s[3]);

if(i1>0&&i1<256&&i2<256&&i3<256&&i4<256)

a = true;

}

return a;

}

public static void main(String[] args) throws Exception {

String s= " 122.005.133.244 ";

isIpv4 isip = new isIpv4();

boolean check = isip.isipv4(s);

System.out.println(check);

System.out.println(check? "是一个常规ipv4地址" : "不是一个ip地址");

}

}

运行第一次的时候出错:

db4f70c9835df796c90b810d2d22b43e.png

调试了半天,问题还是差不出来,干脆屏蔽这块空白字符处理的代码继续

屏蔽掉字符处理后还是报错,各种打印值后发现正则写的有点问题

更正:

boolean flag =ip.matches("\\d{1,3}\\.d{1,3}\\.d{1,3}\\.d{1,3}");

更正后继续运行调试,终于打印出结果,没有报错信息了

3a1b9075af8842ff6506503bb8d15e70.png

小小高兴下,继续吧

继续打开字符处理屏蔽找出字符越界的问题,一直没查出报错原因,这里留一个坑。后来想想,我只是要减去空格啊,为啥只处理头尾呢,不如直接trim()了啊,现成的api啊。这里被自己的笨到了

继续改了:

public class isIpv4{

public boolean isipv4(String ip){

//判断是否是一个ip地址

boolean a=false;

ip = cutblank(ip);

boolean flag =ip.matches("\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}");

if(flag)

{

String s[] = ip.split("\\.");

int i1= Integer.parseInt(s[0]);

int i2= Integer.parseInt(s[1]);

System.out.println(i2);

int i3= Integer.parseInt(s[2]);

int i4= Integer.parseInt(s[3]);

if(i1>0&&i1<256&&i2<256&&i3<256&&i4<256)

a = true;

}

return a;

}

public String cutblank(String str){

String str1=str.trim();

/*

//如果字符串前有空格

while(str.startsWith(""))

{

str=  str.substring(1,str.length()).trim();

}

//去掉字符串后的空格

while(str.endsWith(""))

{

str= str.substring(0,str.length()-1).trim();

System.out.println(str);

}

*/

System.out.println(str1);

return str1;

}

public static void main(String[] args) throws Exception {

String s = " 122.005.133.244 ";

isIpv4 isip = new isIpv4();

boolean check = isip.isipv4(s);

System.out.println(check);

System.out.println(check? "是一个常规ipv4地址" : "不是一个ip地址");

}

}

测试了下,结果妥妥的:

测试 ” 122.005.133.244”

ad1e4d7e7732f66ac9d21fea2029b35b.png

测试:" a2..451.3 4 "

a84c307b650a4db5dceb29e0210453e9.png

这里把字符串转换成integer的好处就是避免去判断子串中第一个字符不为0的情况,第一个和第二个不能同时为0的情况

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值