拆分IP地址字符串以检查是否有效,如果有效:创建数组以存储每个值

时间:2016-09-10 07:32:05

标签: java ip-address

所以在我的主要客户端方法中,我有:

IPAddress a1 = new IPAddress("153.0012.60.02");

然后在我的IPAddress类中,我有:

public class IPAddress {
private int[] parts;

public void reset() {
    parts = new int[4];
}
上面的

应该将实例变量数组部分实例化为大小为4的数组

public static boolean isValidElement(String token) {
    String[] validString = token.split("\\."); 
    if (validString.length != 4)
        return false;
    for (String str: validString ) {
        int i = Integer.parseInt(str); 
        if ((i < 0) || (i > 255)) { 
            return false; 
        } 
    }
        return true; 

}
如果参数是整数

的字符串表示,则上面的

应该返回true

  • 介于0和255之间(包括0和255),否则为false。
  • Strings&#34; 0&#34;,&#34; 1&#34;,&#34; 2&#34; ....&#34; 254&#34;,&#34; 255&#34;是有效的。
  • 填充字符串(例如&#34; 00000000153&#34;)也有效

    public void setParts(String ip) {
    
    //to be completed
    
    }
    

    如果传递的字符串中的IP地址有效,

    • 设置实例变量部分以将其存储为4个整数值。
    • 例如,如果ip =&#34; 192.000168.0.0000001&#34;,则部分应为{192,168,0,1}。
  • 如果传递的IP地址无效,则部分应为{0,0,0,0}

public void reset();

public static boolean isValidElement(String token)

正确?

感谢任何帮助,谢谢

2 个答案:

答案 0 :(得分:1)

您的方法isValidElement将参数作为字符串,但您传递的是IPAddress的对象类型。您需要根据对象IPAddress更改代码,或者直接将字符串传递给isValidElement方法,如下所述

    String a1="153.0012.60.02";
    System.out.println(isValidElement(a1));

用于存储ip地址,在类中使用数组

        static int[] arr =new int[4];

并改变您的方法,如下所述

 public static boolean isValidElement(String token) {
 String[] validString = token.split("\\."); 
    if (validString.length != 4)
     return false;
    int j=0;
    for (String str: validString ) {
    int i = Integer.parseInt(str); 
    arr[j]=i;
    j++;
    if ((i < 0) || (i > 255)) { 
        return false; 
    } 
    }
    return true; 

   }

答案 1 :(得分:0)

不要这样做。 重新发明轮子。

做一些研究,找出其他人如何验证正则表达式。例如this

当然,你可以为学习&#34;学习&#34;挑战。但请放心:它比表面上听起来更复杂。所以,如果这是某种产品;然后再重复使用别人之前制作的东西。

最后:你确定你的IP地址总是是IPv4吗?你看,IPv6要复杂得多;但是,&#34;不知何故即将来临&#34 ;;因此,如果您的代码在仅支持v4而非v6时非常好,那么您现在可以更好地思考。