题解 | #验证IP地址#
验证IP地址
https://www.nowcoder.com/practice/55fb3c68d08d46119f76ae2df7566880
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";
}
if(isIPv6(IP)){
return "IPv6";
}
return "Neither";
}
public boolean isIPv4(String IP){
// 判断有无字符.
if(IP.indexOf('.') == -1){
return false;
}
// 按.分割
String[] s = IP.split("\\.",-1);
// 判断分割后是否为4组
if(s.length != 4){
return false;
}
for(int i = 0; i < s.length;i++){
// 判断分后后位数及不能有前缀0
if(s[i].length() < 1 || s[i].length() > 3 || (s[i].length() != 1 && s[i].charAt(0) == '0')){
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 + (int)(c - '0');
if(num < 0 || num > 255){
return false;
}
}
}
return true;
}
public boolean isIPv6(String IP){
// 判断是否有字符:
if(IP.indexOf(":") == -1){
return false;
}
// 按字符:分割
String[] s = IP.split(":",-1);
// 判断分割后是否为8组
if(s.length != 8){
return false;
}
for(int i = 0;i < s.length;i++){
// 分割结果位数判断
if(s[i].length() < 1 || s[i].length() > 4){
return false;
}
// 分割结果字符比较
for(int j = 0;j < s[i].length();j++){
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;
}
}