HJ90 合法IP – 三郎君的日常

Java基础 / 面试 · 2022年6月4日 0

HJ90 合法IP

描述

IPV4地址可以用一个32位无符号整数来表示,一般用点分方式来显示,点将IP地址分成4个部分,每个部分为8位,表示成一个无符号整数(因此正号不需要出现),如10.137.17.1,是我们非常熟悉的IP地址,一个IP地址串中没有空格出现(因为要表示成一个32数字)。现在需要你用程序来判断IP是否合法。
数据范围:数据组数:1≤t≤18 
进阶:时间复杂度:O(n)\O(n) ,空间复杂度:O(n)\O(n

输入描述:

输入一个ip地址,保证不包含空格

输出描述:

返回判断的结果YES or NO

示例1

输入:

255.255.255.1000

输出:

NO
import java.util.*;

public class Main{
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        while(sc.hasNext()){
            String[] str = sc.nextLine().split("\\.");
            boolean flag = true;
            if(str.length == 4){
                for(int i = 0; i < 4; i++){
                    if(str[i].equals("")){
                        flag = false;
                        break;
                    }else if(str[i].length()>1 && str[i].charAt(0)=='0'){
                        flag = false;
                        break;
                    }else if(str[i].replaceAll("[0-9]","").length() != 0){
                        flag = false;
                        break;
                    }else if(Integer.parseInt(str[i])<0 || Integer.parseInt(str[i])>255){
                        flag = false;
                        break;
                    }else{
                        flag = true;
                    }
                }
            }else{
                flag = false;
            }
            
          System.out.println(flag ? "YES" : "NO");  
        }
    }
}

用’.’截取分割字符串,应该把ip分成四个子串。然后分别对这四个子串进行检验:检验的项目有1、非空检验;2、非零数是否含有前导零;3、是否含’+’号;4、是否在0-255之间。

import java.util.*;
/*
用'.'截取分割字符串,应该把ip分成四个子串。
然后分别对这四个子串进行检验:检验的项目有
1、非空检验;
2、非零数是否含有前导零;
3、是否含'+'号;
4、是否在0-255之间。
*/
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        boolean isValid= true;
        while (in.hasNext()) { 
            String s = in.nextLine();
            String ips[] = s.split("\\.");
            if(ips.length!=4){
                isValid = false;
                break;
            }
            for(int i =0;i<ips.length;++i){
                if(check(ips[i])){
                   isValid = false;
                    break;
                }
            }
        }
        if(isValid)
             System.out.println("YES");
        else  System.out.println("NO");
    }
    public static boolean check(String s){
        if(s.equals(""))return true;
        int temp =Integer.parseInt(s);
        if(temp!=0&&s.charAt(0)=='0')return true;
        else if(s.charAt(0)=='+')return true;
        else if(temp<0||temp>=255)return true;
        return false;
    }
}