给出的字符串无疑是100%的有效IP地址。
但是,将其作为参数接收的方法不会接收告诉它是IPv4还是IPv6的附加参数。
我已经看到一种确定是IPv4还是IPv6的方法:
InetAddress address = InetAddress.getByName(ip);
if (address instanceof Inet6Address) {
// It's ipv6
} else if (address instanceof Inet4Address) {
// It's ipv4
}
但是我正在寻找一种更快的方法(请注意,上面也应该包含try / catch)。
我可以摆脱一些简单的事情吗:
if (totallyValidIp.contains(":") {
// It's ipv6
}
else {
// It's ipv4
}
还是有一个我不知道的地方? (例如,不包含任何“:”的有效IPv6)。
注意:这种“优化”指望我知道IP字符串是已经检查和验证的IP地址这一事实。
最佳答案
IPv6地址字符串将包含两个到七个冒号,不一定是连续的。但是,如果您已经在其他地方验证了地址,那么检查冒号的存在就足够了。
但是,如果您已经有一个InetAddress
对象,只需坚持使用instanceof
。来回转换为字符串听起来像很多不必要的工作。
关于java - 有效IP字符串中的“:”是否足以确定其为IPv6地址?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48787357/