判斷一個字符串是不是ip地址的實現方法

最近在學習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

wKioL1lsej6wF6TcAAB4ot17ZQk630.jpg-wh_50

調試了半天,問題仍是差不出來,乾脆屏蔽這塊空白字符處理的代碼繼續ide


屏蔽掉字符處理後仍是報錯,各類打印值後發現正則寫的有點問題學習

更正:測試

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

更正後繼續運行調試,終於打印出結果,沒有報錯信息了3d

wKioL1lsfEihrU9vAAA0ct6kwdc318.jpg-wh_50

小小高興下,繼續吧
調試

繼續打開字符處理屏蔽找出字符越界的問題,一直沒查出報錯緣由,這裏留一個坑。後來想一想,我只是要減去空格啊,爲啥只處理頭尾呢,不如直接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」

wKiom1lsgT7QYW0NAAA-aOnYNFU468.jpg-wh_50

測試:" a2..451.3 4 "

wKiom1lsgeeA709_AAA1PYTwUdA701.jpg-wh_50


這裏把字符串轉換成integer的好處就是避免去判斷子串中第一個字符不爲0的狀況,第一個和第二個不能同時爲0的狀況

相關文章
相關標籤/搜索