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 参数可以确保尾部的空字符串也会被保留在结果数组中。
*/