代表IPV6地址的简短形式

时间:2011-08-05 09:48:50

标签: java methods ipv6 utility

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

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

有没有人知道这样做的java方法?

2 个答案:

答案 0 :(得分:0)

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

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

但我确实测试得很好。可能在某些情况下这段代码是错误的。

答案 1 :(得分:0)

The open-source IPAddress Java library可以提供多种生成IPv4和/或IPv6字符串的方法,包括用于IPv6匹配rfc 5952的规范字符串。免责声明:我是该库的项目经理。

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