最近在學習java,研究一些算法,找些聯繫題,本身去下手試試。這裏記錄下學習歷程,也加強本身的記憶。初學者,見笑了。從開始判斷一個字符串是否是正規ipv4的地址開始練習吧,初步代碼以下:
java
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地址");
}
}算法
運行第一次的時候出錯:api
調試了半天,問題仍是差不出來,乾脆屏蔽這塊空白字符處理的代碼繼續ide
屏蔽掉字符處理後仍是報錯,各類打印值後發現正則寫的有點問題學習
更正:測試
boolean flag =ip.matches("\\d{1,3}\\.d{1,3}\\.d{1,3}\\.d{1,3}");this
更正後繼續運行調試,終於打印出結果,沒有報錯信息了3d
小小高興下,繼續吧
調試
繼續打開字符處理屏蔽找出字符越界的問題,一直沒查出報錯緣由,這裏留一個坑。後來想一想,我只是要減去空格啊,爲啥只處理頭尾呢,不如直接trim()了啊,現成的api啊。這裏被本身的笨到了blog
繼續改了:
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的狀況