题解 | #验证IP地址#
验证IP地址
https://www.nowcoder.com/practice/55fb3c68d08d46119f76ae2df7566880
import java.util.*; public class Solution { boolean isIPv4 (String IP) { if(IP.indexOf('.') == -1){ return false; } String[] s = IP.split("\\."); //IPv4必定为4组 if(s.length != 4) return false; for(int i = 0; i < s.length; i++){ //不可缺省,有一个分割为零,说明两个点相连 if(s[i].length() == 0) return false; //比较数字位数及不为零时不能有前缀零 if(s[i].length() < 0 || s[i].length() > 3 || (s[i].charAt(0)=='0' && s[i].length() != 1)) return false; int num = 0; //遍历每个分割字符串,必须为数字 for(int j = 0; j < s[i].length(); j++){ char c = s[i].charAt(j); if (c < '0' || c > '9') return false; //转化为数字比较,0-255之间 num = num * 10 + (int)(c - '0'); if(num < 0 || num > 255) return false; } } return true; } boolean isIPv6 (String IP) { //防止:出现在最前 if (IP.indexOf(':') == -1) { return false; } //防止:出现在最后,-1表示不管分割后数组长度为多少, //不+如果最后:出现会将:后面的空串省略 String[] s = IP.split(":",-1); //IPv6必定为8组 if(s.length != 8){ return false; } for(int i = 0; i < s.length; i++){ //每个分割不能缺省,不能超过4位 if(s[i].length() == 0 || s[i].length() > 4){ return false; } for(int j = 0; j < s[i].length(); j++){ //不能出现a-fA-F以外的大小写字符 char c = s[i].charAt(j); boolean expr = (c >= '0' && c <= '9') || (c >= 'a' && c <= 'f') || (c >= 'A' && c <= 'F') ; if(!expr){ return false; } } } return true; } String solve(String IP) { if(isIPv4(IP)) return "IPv4"; else if(isIPv6(IP)) return "IPv6"; return "Neither"; } }