您的位置:首页 > 其它

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

2017-07-17 16:32 555 查看
最近在学习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地址");

}

}

运行第一次的时候出错:



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

屏蔽掉字符处理后还是报错,各种打印值后发现正则写的有点问题
更正:
boolean flag =ip.matches("\\d{1,3}\\.d{1,3}\\.d{1,3}\\.d{1,3}");
更正后继续运行调试,终于打印出结果,没有报错信息了



小小高兴下,继续吧

继续打开字符处理屏蔽找出字符越界的问题,一直没查出报错原因,这里留一个坑。后来想想,我只是要减去空格啊,为啥只处理头尾呢,不如直接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”




测试:" a2..451.3 4 "




这里把字符串转换成integer的好处就是避免去判断子串中第一个字符不为0的情况,第一个和第二个不能同时为0的情况
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  ip 算法 地址
相关文章推荐