日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

ipv4、ipv6格式校验代码

發布時間:2023/12/31 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ipv4、ipv6格式校验代码 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

ipv4、ipv6格式校驗代碼

一、題目

IPv4 地址格式:
IPv4地址由4組十進制數組成,每組范圍為 0 - 255,用“.”分割。
注意:IPv4 地址內的數不能以 0 開頭。
例:127.23.01.16 不合法,01以0開頭

IPv6 地址格式:
IPv6由8組16進制的數字組成,每組由數字和字符組成,表示16位數。用 “:”分割。
注意:
不區分大小寫;
數字可以以0 開頭,但多余的 0 不被允許;
例:1027:00000:1901:234d:a908:2313:4432:0232不合法,出現00000超出4位。
不能因為某個組的值為 0,而使用一個空的組,以至于出現 ( :: ) 的情況;
例:1027::1901:234d:a908:2313:4432:232不合法,出現::。

輸入格式:
鍵盤輸入一個字符串

輸出格式:
若字符串符合ipv4格式,則輸出"ipv4";
若字符串符合ipv6格式,則輸出"ipv6";
都不滿足,則輸出"Neither";

二、解答

規則分析:
ipv4校驗邏輯:

  • ipv4分割后數組大小==4 ;
  • 每位數字長度[1,3];
  • 不能以多余的0開頭;
  • 每位判斷是否是數字;

ipv6校驗邏輯:

  • ipv6分割后數組大小==8 ;
  • 每位長度[0,4];
  • 每位是否為數字、或小寫字符a-f、或大寫字符A-F

代碼實現
【方式一】上述思路實現:

public class _ipv4_ipv6 {public static void main(String[] args) {Scanner sc = new Scanner(System.in);String IP = sc.nextLine();System.out.println(new _ipv4_ipv6().judgeIp(IP));}public String judgeIp(String IP) {if (IP.contains(".")) {String[] ipv4 = IP.split("\\.");if (ipv4.length == 4 && judgeIpv4(ipv4)) return "IPv4";} else if (IP.contains(":")) {String[] ipv6 = IP.split(":");if (ipv6.length == 8 && judgeIpv6(ipv6)) return "IPv6";}return "Neither";}/*** ipv4判斷邏輯:0-ipv4數組大小==4(前面判斷了)1-每位數字長度[1,3],2-不能以多余的0開頭,3-每位判斷是否是數字* @param ipv4* @return*/private boolean judgeIpv4(String[] ipv4) {for (int i = 0; i < ipv4.length; i++) {char[] num = ipv4[i].toCharArray();if (num.length == 0 || num.length > 3 || (num.length > 1 && num[0] == '0')) return false;//判斷是否每一位都是數字 // 方法一:用ASCII碼判斷:ch - '0' >= 0 && ch - '9' <= 0 // 方法二:用Character.isDigit()判斷 // for (int j = 0; j < num.length; j++) { // if (!Character.isDigit(num[j])) return false; // } // 方法三:用正則表達式判斷 [0-9]*:[0-9]表示只能為0-9范圍,*表示出現0次或多次,pattern.matcher(ipv4[i]).matches()得結果Pattern pattern = Pattern.compile("[0-9]*");if (!pattern.matcher(ipv4[i]).matches() || Integer.valueOf(ipv4[i]) > 255) return false;}return true;}/*** ipv6判斷邏輯:0-ipv6數組大小==8(前面判斷了)1-每位長度[0,4],2-每位是否為[0,9][A-F][a-f]* @param ipv6* @return*/private boolean judgeIpv6(String[] ipv6) {for (int i = 0; i < ipv6.length; i++) {String num = ipv6[i].toUpperCase(Locale.ROOT);if (num.length() == 0 || num.length() > 4) return false;Pattern pattern = Pattern.compile("[0-9A-F]*");if (!pattern.matcher(num).matches()) return false;}return true;} }

【方式一】直接調用內置工具類IPAddressUtil

public class _ipv4_ipv6 {public static void main(String[] args) {Scanner sc = new Scanner(System.in);String IP = sc.nextLine();System.out.println(new _ipv4_ipv6().judgeIp2(IP));}/*** 實現ipv4和ipv6判斷的第二種方法:借助內置工具類IPAddressUtil* 注意:IPAddressUtil在判斷ipv6的時候,允許::,即全0的時候允許不寫0,因此這里需要做下處理* @param IP* @return*/public String judgeIp2(String IP) {if (IPAddressUtil.isIPv4LiteralAddress(IP)) return "ipv4";else if (IPAddressUtil.isIPv6LiteralAddress(IP)) { // 過濾::的情況,返回NeitherString[] ipv6 = IP.split(":");for (int i = 0; i < ipv6.length; i++) {if (ipv6[i] == null || ipv6[i].equals("") || ipv6[i].length() == 0) return "Neither";}return "ipv6";}return "Neither";} }

總結

以上是生活随笔為你收集整理的ipv4、ipv6格式校验代码的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。