我有一个IPv6地址字符串:2001:1:0:0:10:0:10:10
我想将其表示为IPV6字符串的简短形式:2001:1 :: 10:0:10:10
有没有人知道这样做的java方法?
答案 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