-1

我有一个 IPv6 地址字符串:2001:1:0:0:10:0:10:10

我想将其表示为 IPV6 字符串的简短形式:2001:1::10:0:10:10

有谁知道这样做的java方法?

4

2 回答 2

0

由于在某些情况下可以通过多种不同的方式缩短它,因此 java API 中可能没有这样的功能。您可以手动执行:

Inet6Address.getByName("1080::8:800:200C:417A").replaceFirst("(:0)+:", "::");

但我没有很好地测试它。在某些情况下,此代码可能是错误的。

于 2011-08-05T10:17:19.043 回答
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
于 2020-01-12T23:21:08.077 回答