栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Leetcode--Java--468. 验证IP地址

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Leetcode--Java--468. 验证IP地址

题目描述

样例描述
示例 1:

输入:IP = "172.16.254.1"
输出:"IPv4"
解释:有效的 IPv4 地址,返回 "IPv4"
示例 2:

输入:IP = "2001:0db8:85a3:0:0:8A2E:0370:7334"
输出:"IPv6"
解释:有效的 IPv6 地址,返回 "IPv6"
示例 3:

输入:IP = "256.256.256.256"
输出:"Neither"
解释:既不是 IPv4 地址,又不是 IPv6 地址

思路

模拟 + 先框架再细节

  1. 本题直接模拟,先搭建出整体框架,检查IPv4和检查IPv6,再对各种不合法情况检查
  2. indexOf()方法,查找某个字符所在下标的位置,如果不存在就是-1。 Split()方法,分割,注意这里.需要加上转移字符,又由于也要转义,所以就是.,作用就是. :不需要转义
  3. 细节:split分割,要考虑末尾是.的情况,比如IPv4这种情况长度也是4
  4. 如果不让使用split,要自己实现的话,可以用双指针来“截取”,先将原字符末尾加上分割符号,便于统一处理
代码
class Solution {
    
    private String checkIPv4(String IP) {
        //以.分割要用转义字符, 然后本身也要加来转义, \.作用就是.
      String items[] = IP.split("\.");
      //如果不是4项,或者末尾还有.,因为如果末尾有. ,split分割出来也是4项
      if (items.length != 4 || IP.charAt(IP.length() - 1) == '.') {
          return "Neither";
      }
      for (String item: items) {
          //如果该项为空,或者长度大于3, 不合法
          if (item.isEmpty() || item.length() > 3) {
            return "Neither";
          } 
          //如果含有前导0,不合法
          if (item.length() > 1 && item.charAt(0) == '0') {
              return "Neither";
          }
          for (char c: item.toCharArray()) {
              //如果字符不是0~9,不合法
              if (c < '0' || c > '9') return "Neither";
          }
          //如果都是0~9,计算出对应的数字看是小于等于255
          int num = Integer.parseInt(item);
          if (num > 255) return "Neither";
      }
      return "IPv4";
    }
    
    private String checkIPv6(String IP) {
      String items[] = IP.split(":");    
      if (items.length != 8 || IP.charAt(IP.length() - 1) == ':') {
          return "Neither";
      }
      for (String item: items) {
          if (item.isEmpty() || item.length() > 4) {
              return "Neither";
          }
          for (char c: item.toCharArray()) {
              //检查字符是否符合0~9,a~f或者A~F
              if (!check(c)) {
                  return "Neither";
              }
          }
      }
      return "IPv6";
    }

    public boolean check(char c) {
        if (c >= '0' && c <= '9') return true;
        if (c >= 'a' && c <= 'f') return true;
        if (c >= 'A' && c <= 'F') return true;
        return false;
    }

    public String validIPAddress(String queryIP) {
     //:和.都存在
     if (queryIP.indexOf('.') != -1 && queryIP.indexOf(':') != -1) return "Neither";
     if (queryIP.indexOf('.') != -1) return checkIPv4(queryIP);
     if (queryIP.indexOf(':') != -1) return checkIPv6(queryIP);
     return "Neither";
    }
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/681156.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号