我的程序将一个包含 IP 地址列表的字符串作为输入参数。每个 IP 地址由换行符分隔。它看起来像这样:
10.1.1.1 2.2.2.2 11.1.1.1
它看起来像这样
10.1.1.1-20 1.1.1.1
但它看起来像这样
172.16.12.1-20 /24 10.1.1.1
我想检查每个 IP 地址并返回两个列表 validAddresses、invalidAddresses。
我已经编写了一个程序来处理第一个最简单的输入类型,即没有 IP 地址范围和网络掩码。
private String[] extractIPAddress(String address){
String[] temp;
temp = address.split("\\s+");
return temp;
}
然后我做
addressList = extractIPAddress(String.valueOf(value));
for (int i=0; i < addressList.length; i++) {
if (InetAddresses.isInetAddress(addressList[i]) == true) {
validAddress = validAddress.concat(addressList[i] + '\n');
} else {
invalidAddress = invalidAddress.concat(addressList[i] + '\n');
}
}
现在我正在思考如何处理最复杂的输入类型,尤其是。
当线路附有范围时
1.1.1.1-10
,如何删除-10
部分以检查主IP地址;如何检查范围部分是否-10
会生成有效的 IP 地址,即1.1.1.10
,然后如何将所有内容放在一起,以便我可以将其作为validAddress
字符串的一行返回,看起来与开头相同,即1.1.1.1-10
同样的问题适用于网络掩码
/24
这样的节目会有哪些元素?你能给我概述一下吗?
我以为我会做以下事情,但我不确定这是否是正确的方法以及如何实现某些部分:
- 如果我找到一个
-
然后从直到行尾或“/”的位置切断部分-
(怎么做?) - 将该部分保存到
ipRange
变量中 - 如果我找到
/
然后从 的位置开始切断该部分,/
直到行尾 - 将该部分保存到
netMask
变量中 - 将内容复制到
tmp_ipRange = ipRange
- 删除变量
-
中的tem_ipRange
- 将主 IP 地址的最后一个八位字节替换为
tmp_ipRange
(怎么做?) - 将新的 IP 地址添加到由创建的数组中
String.split()
(不可能,因为你不能只在 java 中的数组中添加一些东西?我有什么替代方法?所以我不能在这里使用拆分?) - 循环
addressList
(见上面的代码)并检查IP地址是否是有效的IP地址 - 验证后添加
ipRange
到主ipAddress
如果ipRange
不是null
(我如何找到所属的主ipAddress
?ipRange
) - 验证后添加
netMaske
到主ipAddress
(和范围)如果mainAddress
不是null
(我如何找到主ipAddress
所属netMask
的?)