给定一个字符串,找出它是否满足 IPv4 地址命名规则(代码审查),而不是寻找其他解决方案



IP地址是分配给参与使用Internet协议进行通信的计算机网络的每个设备(例如,计算机,打印机(的数字标签。互联网协议有两个版本,因此地址有两个版本。其中之一是IPv4地址。

IPv4 地址以点十进制表示法表示,该表示法由四个十进制数字组成,每个十进制数字的范围从 0 到 255(包括 0 到 255(,用点分隔,例如 172.16.254.1。

对于输入字符串 = "172.16.254.1",输出应为 isIPv4Address(inputString( = true;

对于输入字符串 = "172.316.254.1",输出应为 isIPv4Address(inputString( = false

这是我的解决方案:

boolean isIPv4Address(String inputString) {
String splitparts[] = inputString.split("[.]");
if(splitparts.length != 4){
return false;
}
for(String part : splitparts){
if(part.isEmpty())
return false;
if(!part.matches("[0,9]{1,3}"))
return false;
if(!(Integer.parseInt(part)>=0 && Integer.parseInt(part)<=255))
return false;
}
return true;
}

我的解决方案在所有情况下都返回 false,我无法找出错误的原因。 如果有人审查我的代码并向我解释为什么它只返回 false,那就太好了。

你的问题在于 [0,9]{1,3}。在 [] 块中,您应该使用 - 来表示范围。它应该是 [0-9]{1,3}。它在字符串内部查找一行中的 1 到 3 个字符,这些字符要么是"0"、文字字符串"、"或"9"。如果您希望它只接受 1 到 3 个字符长的字符串,您可以执行以下操作:

^[0-9]{1,3}$

^ 表示开始,$ 表示结束。

最新更新