Java 表示IPV6地址的缩写形式
我有一个IPv6地址字符串:2001:1:0:0:10:0:10:10 我想将其表示为IPV6字符串的一个简短形式:2001:1::10:0:10:10Java 表示IPV6地址的缩写形式,java,methods,ipv6,utility,Java,Methods,Ipv6,Utility,我有一个IPv6地址字符串:2001:1:0:0:10:0:10:10 我想将其表示为IPV6字符串的一个简短形式:2001:1::10:0:10:10 有人知道用java方法来实现这一点吗?因为在某些情况下,它可以用许多不同的方式缩短,所以java API中可能没有这样的函数。您可以手动执行以下操作: Inet6Address.getByName("1080::8:800:200C:417A").replaceFirst("(:0)+:", "::"); 但是我没有很好地测试它。在某些情况下
有人知道用java方法来实现这一点吗?因为在某些情况下,它可以用许多不同的方式缩短,所以java API中可能没有这样的函数。您可以手动执行以下操作:
Inet6Address.getByName("1080::8:800:200C:417A").replaceFirst("(:0)+:", "::");
但是我没有很好地测试它。在某些情况下,此代码可能是错误的。可以提供多种方法为IPv4和/或IPv6生成字符串,包括与rfc 5952匹配的IPv6规范字符串。免责声明:我是该库的项目经理
方法toCanonicalString()生成规范字符串,还有一个方法toCompressedString()略有不同。对于规范字符串,不压缩单个零段,但toCompressedString()将压缩此类段。方法toNormalizedString()根本不会压缩
使用您的示例2001:1:0:0:10:0:10:10和另一个示例代码:
IPAddress addr=新的IPAddress字符串(“2001:1:0:0:10:0:10”).getAddress();
System.out.println(addr.toNormalizedString());
System.out.println(addr.toCanonicalString());
System.out.println(addr.toCompressedString());
System.out.println();
addr=newIPAddressString(“2001:db8:0:1:1:1:1”).getAddress();
System.out.println(addr.toNormalizedString());
System.out.println(addr.toCanonicalString());
System.out.println(addr.toCompressedString());
输出:
2001:1:0:0:10:0:10:10
2001:1::10:0:10:10
2001:1::10:0:10:10
2001:db8:0:1:1:1:1:1
2001:db8:0:1:1:1:1:1
2001:db8::1:1:1:1:1
小贴士:“这很紧急”不会让你在这里得到任何好处。我去喝咖啡,用谷歌搜索答案,然后考虑发布解决方案。给我4个小时p这里有一个很好的Java特定答案: