拆分后在JAVA中存储值

时间:2015-04-03 19:13:13

标签: java

我正在进行另一项任务,并提出一个问题(首先我很确定)。我正在开发一个验证和设置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。

非常感谢任何帮助!

3 个答案:

答案 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]);
    }
}