import java.util.*; public class Solution { /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * 验证IP地址 * @param IP string字符串 一个IP地址字符串 * @return string字符串 */ public String solve (String IP) { // write code here if(isIPv4(IP))return "IPv4"; else if(isIPv6(IP))return "IPv6"; else return "Neither"; } private boolean isIPv4(String IP){ if(IP.indexOf(".") == -1)return false; String[] s = IP.split("\\."); if(s.length != 4)return false; for(int i = 0; i < 4; i++){ if(s[i].length() == 0)return false; if(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; num = num*10+(c-'0'); } if(num > 255)return false; } return true; } private boolean isIPv6(String IP){ if(IP.indexOf(":") == -1)return false; String[] s = IP.split(":", -1); if(s.length != 8)return false; for(int i = 0; i < 8; i++){ if(s[i].length() == 0 || s[i].length() > 4)return false; for(int j = 0; j < s[i].length(); j++){ char c = s[i].charAt(j); boolean flag = (c >= '0' && c <= '9') || (c >= 'a' && c <= 'f') || (c >= 'A' && c <= 'F'); if(!flag)return false; } } return true; } } /** 在Java中, split() 方法用于将字符串拆分为子字符串数组,根据指定的分隔符来划分原始字符串。在这种情况下,参数 -1 表示将保留原始字符串中的所有尾部空字符串。如果不使用 -1 参数,则默认情况下, split() 方法会删除尾部的空字符串。因此,使用 -1 参数可以确保尾部的空字符串也会被保留在结果数组中。 */