最近在学习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的情况
转载于:https://blog.51cto.com/4998165/1948259