我有一个 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)+:", "::");
但我没有很好地测试它。在某些情况下,此代码可能是错误的。
开源 IPAddress Java 库可以提供多种生成 IPv4 和/或 IPv6 字符串的方法,包括用于匹配 rfc 5952 的 IPv6 的规范字符串。免责声明:我是该库的项目经理。
toCanonicalString() 方法生成规范字符串,还有一个方法 toCompressedString() 略有不同。对于规范字符串,单个零段不会被压缩,但 toCompressedString() 将压缩这样的段。toNormalizedString() 方法根本不会压缩。
使用您的示例 2001:1:0:0:10:0:10:10 ,另一个是示例代码:
IPAddress addr = new IPAddressString("2001:1:0:0:10:0:10:10").getAddress();
System.out.println(addr.toNormalizedString());
System.out.println(addr.toCanonicalString());
System.out.println(addr.toCompressedString());
System.out.println();
addr = new IPAddressString("2001:db8:0:1: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