我正在进行另一项任务,并提出一个问题(首先我很确定)。我正在开发一个验证和设置IP地址,子网掩码,默认网关和DNS的程序。在我的validIP方法中检查IP是否有效,我有以下代码:
try {
if (ip == null || ip.isEmpty()) {
return false;
}
String[] parts = ip.split( "\\." );
if ( parts.length != 4 ) {
return false;
}
for ( String s : parts ) {
int i = Integer.parseInt( s );
if ( (i < 0) || (i > 255) ) {
return false;
}
}
if(ip.endsWith(".")) {
return false;
}
return true;
} catch (NumberFormatException nfe) {
return false;
}
这有效地检查并确保其格式有效。现在,我想创建另一种方法来确保地址是可分配的。 IE如果是2,3,4个八位字节在有效范围内的类地址。我如何存储拆分中的信息,以便进行比较?就像它的类a(第一个八位位组在1-127之间)一样,我需要比较其他八位位组以确保它们不是全0或255。
非常感谢任何帮助!
答案 0 :(得分:0)
如果我的问题是正确的,您希望将解析的int值存储在数组中:
int[] parsed = new int[4];
for (int i = 0; i < 4; i++) {
parsed[i] = Integer.parseInt(parts[i]);
}
然后你可以测试它们:
if (parsed[0] >= 1 && parsed[0] <= 127) {
if ((parsed[1] != 0 && parsed[1] != 255)
|| (parsed[2] != 0 && parsed[2] != 255)
|| (parsed[3] != 0 && parsed[3] != 255)) {
...
}
}
答案 1 :(得分:0)
你可以应用这样的逻辑。保留一个布尔值,如果有0 or 255.
类,则使用if-conditions或switch-cases更新。
String[] parts = {"192","255","255","255"};
boolean valid = true;
for(int i = 0;i<parts.length;i++){
for(int j = i+1 ; j< parts.length;j++){
if(parts[j].equalsIgnoreCase("255") || parts[j].equalsIgnoreCase("0"))
valid = false;
}
}
答案 2 :(得分:0)
如果它是Java任务,请使用Java提供的内容:面向对象。创建一个表示IP地址的类。专用对象将更容易传递和交互。 基于代码的简单示例:
public class IpAddress {
public final int partOne;
public final int partTwo;
public final int partThree;
public final int partFour;
public IpAddress(int partOne, int partTwo, int partThree, int partFour) {
this.partOne = partOne;
this.partTwo = partTwo;
this.partThree = partThree;
this.partFour = partFour;
}
public static IpAddress valueOf(String ip) {
if (ip == null || ip.isEmpty())
return null;
String[] parts = ip.split("\\.");
if (parts.length != 4)
return null;
if (ip.endsWith("."))
return null;
int[] intParts = new int[4];
try {
for (int i = 0; i < 4; i++) {
int intPart = Integer.parseInt(parts[i]);
if (intPart < 0 || intPart > 255)
return null;
intParts[i] = intPart;
}
} catch (NumberFormatException nfe) {
return null;
}
return new IpAddress(intParts[0], intParts[1], intParts[2], intParts[3]);
}
}