Java中有一个可用的库。开源 IPAddress Java 库具有将地址合并到前缀块子网的方法。免责声明:我是 IPAddress 库的项目经理。
以下方法“合并”显示了代码,依赖于库中的方法 mergeToPrefixBlocks:
static String[] merge(List<String> strs) {
// convert first to address
IPAddress first = new IPAddressString(strs.get(0)).getAddress();
// convert remaining to address
IPAddress others[] = strs.subList(1, strs.size()).stream().map(str -> new IPAddressString(str).getAddress()).toArray(IPAddress[]::new);
// merge them all
IPAddress[] blocks = first.mergeToPrefixBlocks(others);
// convert back to strings
return Arrays.stream(blocks).map(block -> block.toString()).toArray(String[]::new);
}
可以使用您的一组示例地址来演示该方法,如以下代码所示:
ArrayList<String> strs = new ArrayList<>();
String firstPref = "1.1.3.";
String secondPref = "1.2.3.";
String thirdPref = "1.3.3.";
for(int i = 0; i <= 255; i++) {
strs.add(firstPref + i);
strs.add(secondPref + i);
}
for(int i = 0; i <= 129; i++) {
strs.add(thirdPref + i);
}
String result[] = merge(strs);
System.out.println("blocks are " + Arrays.asList(result));
输出是:
blocks are [1.3.3.128/31, 1.3.3.0/25, 1.1.3.0/24, 1.2.3.0/24]