题解 | #验证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 //用split方法把字符串分割成字符串数组 //对于IPv4,用.来分割成四节;IPv6,用:分割成8节 //再对于IPv4,判断每一节,第一个为0,则长度不能超过1;字符串转数字后只能在0-255 //对于IPv6,每一节由0-9以及a-e,A-E组成,长度不能超过四个 if (IP.contains(".")) { //针对IPv4的 String [] parts = IP.split("\\.",-1); if (parts.length != 4) { return "Neither"; } for (String part : parts) { if (part.length() < 1 || part.length() > 3) { return "Neither"; } //首位为0,位数不是1 if (part.charAt(0) == '0' && part.length() > 1) { return "Neither"; } //不全是数字 for (char ch : part.toCharArray()) { if (!Character.isDigit(ch)) { return "Neither"; } } if (Integer.parseInt(part) < 0 || Integer.parseInt(part) > 255) { return "Neither"; } } return "IPv4"; } if (IP.contains(":")) { //针对IPv6的 String [] parts = IP.split(":",-1); if (parts.length != 8) { return "Neither"; } for (String part : parts) { if (part.length() < 1 || part.length() > 4) { return "Neither"; } //除了数字,ae还有其他的 for (char ch : part.toCharArray()) { if (!isHex(ch) ) { return "Neither"; } } } return "IPv6"; } return "Neither"; } private boolean isHex(char c) { if (c >= '0' && c <= '9') { return true; } if (c >= 'a' && c <= 'e') { return true; } if (c >= 'A' && c <= 'E') { return true; } return false; } }
这题主要在于split,分割,它是用正则表达式匹配的,所以要转义。并且可能出现空字符串,影响分割个数,应该用-1来限定分割成多少个,这一点很关键。