• HW-IP合法性_Java


    描述

    现在IPV4下用一个32位无符号整数来表示,一般用点分方式来显示,点将IP地址分成4个部分,每个部分为8位,表示成一个无符号整数(因此不需要用正号出现),如10.137.17.1,是我们非常熟悉的IP地址,一个IP地址串中没有空格出现(因为要表示成一个32数字)。

    现在需要你用程序来判断IP是否合法。

    知识点 字符串,循环,链表,队列,栈,查找,搜索,排序,树,图,数组,函数,指针,枚举,位运算,结构体,联合体,文件操作,递归
    运行时间限制 10M
    内存限制 128
    输入

    输入一个ip地址

    输出

    返回判断的结果YES or NO

    样例输入 10.138.15.1
    样例输出 YES

    个人总结:

        (1)Java语法上正则化表达式的使用技巧,对于','要用'\,'

        (2)注意空字符串“”和null的区别,判断一个字符串是不是空字符串用.equals("")

         (3) 题目本身而言的判断

    1.           注意字符串数组长度必须为四,比如1.1.1就不合法
    2.           而且不能有空字符串,也就是..不能相邻,比如1.1..1就不合法
    3.           对每一个子字符串判定是不是大于等于0,小于等于255的数字;我本人用的是一个个的加,其实可以用Java的 Integer.parseInt(string2);

                  (1,判断是否有三个‘.’;2,判断三个点之间是否不相邻;3,判断每个部分是否是数字;4,判断每个数字是否在0到255之间。)    

    方案一:

    import java.util.Scanner;
    
    public class Main {
    
    public static void main(String[]args){
      Scanner scanner=new Scanner(System.in);
      String string = scanner.nextLine();
      String[] num=string.split("\.");
      boolean result = true;
      if(num.length!=4) result = false;
      for (String string2 : num) {
        int no = Integer.parseInt(string2);
        if(no>=0 && no<=255){
        }else{
        result=false;
        break;
        }
      }
      if(result){
      System.out.println("YES");
      }else{
      System.out.println("NO");
      }
     } 
    }

    方案二:

    import java.util.Scanner;
    
    public class IP_useful {
        public static void main(String[] args){
            System.out.println("请按照规格输入IP地址");
            Scanner ScStr=new Scanner(System.in);
            String sqy = ScStr.nextLine();    
            System.out.println(judge(sqy));  //打印        
        }
        public static String judge(String mxf){
            String str[]=mxf.split("\.");  //以点分开成若干字符串    
            if(str.length!=4){
                return "NO";   //如果没有正好是三个‘.’就返回
            }        
            int num=0;
            int tmp=0;
            int flag[] = new int[str.length];
            int flag1=1;
            for(int i=0;i<str.length;i++){
                if(str[i].equals("")){
                    return "NO";    //如果为空字符串就返回
                }
                char[] ch=str[i].toCharArray(); //将单个字符串转换成字符数组
                if(ch.length<=3){   //小于四个数才能有效
                    for(int j=0;j<ch.length;j++){
                        if(ch[j]>='0'&&ch[j]<='9') { //数字判断
                            tmp=ch[j]-'0';
                            num=num+tmp*10^(ch.length-j-1);
                        }
                    }
                    if(num>=0&&num<256){
                        flag[i]=1;
                    }
                }
            }
            for(int k=0;k<str.length;k++){
                flag1=flag1*flag[k];   //只要每一个的标志位为1;
            }            
            if (flag1==1)
               return "YES";
            else
                return "NO";
        }
    }
  • 相关阅读:
    UIView与CALayer的区别,很详细
    iOS开发之启动动画(动态欢迎界面,非静态Default)
    js前端验证时间大小
    C#联通新版验证码识别的实现
    C#打印100以内质数
    SQL竖表转横表 / 横表转竖表
    不用中间变量交换两个变量的值
    单例模式
    C#递归遍历指定目录下文件和文件夹
    冒泡排序
  • 原文地址:https://www.cnblogs.com/snowwhite/p/4734560.html
Copyright © 2020-2023  润新知