小学生都能看懂的题解 | #验证IP地址#
方案解释
-
目标:这个程序是用来判断一个字符串是否是有效的IP地址。IP地址有两种类型:IPv4和IPv6。
-
IPv4地址:
- 由四个数字组成,每个数字用点(.)分开。
- 每个数字的范围是0到255,比如172.16.254.1。
- 不能以0开头(例如,172.16.254.01是不合法的)。
-
IPv6地址:
- 由八组16进制数字组成,每组用冒号(:)分开。
- 每组可以有1到4个字符,比如2001:0db8:85a3:0:0:8A2E:0370:7334。
- 最后一组不能是空的。
-
返回值:程序会返回“IPv4”或“IPv6”表示地址的类型,或者“Neither”表示这不是一个有效的IP地址。
代码解释
public class IPAddressValidator {
这行代码定义了一个叫 IPAddressValidator
的类,所有的代码都在这个类里面。
public static String validateIPAddress(String ip) {
这个方法 validateIPAddress
接受一个字符串(即IP地址),并返回它的类型。
if (isValidIPv4(ip)) {
return "IPv4";
} else if (isValidIPv6(ip)) {
return "IPv6";
} else {
return "Neither";
}
这段代码检查这个IP地址是否是有效的IPv4或IPv6地址。如果是,返回对应的字符串;如果都不是,就返回“Neither”。
IPv4验证方法
private static boolean isValidIPv4(String ip) {
String[] parts = ip.split("\\.");
if (parts.length != 4) return false;
这个方法用点(.)把字符串分成四部分。如果不是四部分,就返回 false
(表示不合法)。
for (String part : parts) {
if (part.length() == 0 || part.length() > 3) return false;
if (part.charAt(0) == '0' && part.length() > 1) return false;
接下来的部分检查每个部分的长度。如果长度为0或者大于3,就返回 false
。同时,如果数字以0开头且长度大于1,也返回 false
。
try {
int num = Integer.parseInt(part);
if (num < 0 || num > 255) return false;
} catch (NumberFormatException e) {
return false;
}
然后,它尝试把字符串转成数字,检查这个数字是否在0到255之间。如果不是,返回 false
。
IPv6验证方法
private static boolean isValidIPv6(String ip) {
String[] parts = ip.split(":");
if (parts.length != 8) return false;
这个方法用冒号(:)把字符串分成八部分。如果不是八部分,返回 false
。
if (ip.endsWith(":")) return false;
检查这个IP地址的最后部分是不是空的。如果是,返回 false
。
for (String part : parts) {
if (part.length() == 0 || part.length() > 4) return false;
if (!part.matches("[0-9a-fA-F]{1,4}")) return false;
}
然后,检查每一部分的长度和内容。如果长度为0或大于4,或者不包含合法的16进制字符(0-9和a-f),也返回 false
。
完整代码
public class IPAddressValidator {
public static String validateIPAddress(String ip) {
if (isValidIPv4(ip)) {
return "IPv4";
} else if (isValidIPv6(ip)) {
return "IPv6";
} else {
return "Neither";
}
}
private static boolean isValidIPv4(String ip) {
String[] parts = ip.split("\\.");
if (parts.length != 4) return false;
for (String part : parts) {
if (part.length() == 0 || part.length() > 3) return false;
if (part.charAt(0) == '0' && part.length() > 1) return false;
try {
int num = Integer.parseInt(part);
if (num < 0 || num > 255) return false;
} catch (NumberFormatException e) {
return false;
}
}
return true;
}
private static boolean isValidIPv6(String ip) {
String[] parts = ip.split(":");
if (parts.length != 8) return false;
// Check if the last part is empty
if (ip.endsWith(":")) return false;
for (String part : parts) {
if (part.length() == 0 || part.length() > 4) return false;
if (!part.matches("[0-9a-fA-F]{1,4}")) return false;
}
return true;
}
希望这篇文章对你有帮助👍。
#题解#小学生都能看懂的算法 文章被收录于专栏
主要面向小白的算法文章。以小学生都能看懂为目标而编写,顺便巩固下自己。