0

很抱歉用这个相对简单的问题打扰大家,但我在调用 replaceAll("\.","") 时一直遇到空指针异常,我想知道为什么......毫无疑问,我只是简单没有得到。

IPAddress 的简要总结: 提到的第一个类将从 IPAddressTester(后面提到)传递一个字符串值,该值将作为 ipString 存储在 IPAddress 类中。字符串本身的格式为###.###.###.##。我的最终目标是去掉这个字符串的句点,组合生成的标记,然后转换为整数以供以后操作(参见 hashCode 方法)。显然这个类是不完整的,它很可能还有其他问题/问题,但我目前只关注由 replaceAll 导致的空指针错误。

IPAddressTest 小结:顾名思义,就是对IPAddress 进行测试。基本上是一个“司机”。

package ipResolver;

import java.util.Arrays;
import java.util.StringTokenizer; 
import java.util.Scanner;

public class IPAddress implements Comparable<IPAddress>{

     private String ipString;

     private int ipInt;
     private int ipHash;


     //Constructor
     public IPAddress(String ip){
         ipString = ip;
     }


     //--------------------------------Begin Error Region
     String tmpString = ipString.replaceAll("\\.","");
     //--------------------------------End Error Region        

     public int hashCode(int ipToBeHashed){
         return ipHash;
     }

     public boolean equals(Object o){
         return ipString.equals(String.valueOf(o));
     }

     public int compareTo(IPAddress IP){
         return ipInt - IP.ipInt;
     }

     public String toString()
     {
         return ipString;
     }

     public void gettmpString(){
         System.out.println(tmpString);
     }
}

IPAddressTest 类

package test_code;
import java.util.Arrays;

import ipResolver.IPAddress;

public class IPAddressTest {
    public static void main(String args[]){
        String testString = "130.191.208.70";
        IPAddress ipAdd = new IPAddress(testString);
        System.out.println(ipAdd);

        ipAdd.gettmpString();

    }
}

再次,我真诚地道歉,打扰你们所有人,但我猜这个问题可能会有一个简单的一两句话答案(希望不会太侮辱人了;-))

4

3 回答 3

2
String tmpString = ipString.replaceAll("\\.","");

该代码应该在构造函数中,在您实际为 ipString 赋值之后(因为否则它仍然为空)。

public class IPAddress implements Comparable<IPAddress>{

     private final String ipString;

     private final String tmpString;

     //Constructor
     public IPAddress(String ip){
         ipString = ip;
         tmpString = ipString.replaceAll("\\.","");
     }

}

或者,也许您根本不想存储 tmpString,并在使用时计算它:

public String getTmpString(){
    return ipString.replaceAll("\\.","");
}
于 2012-04-03T04:10:14.333 回答
1

你正在初始化

   String tmpString 

带有一个空 ipString。IpString 在构造函数被调用之前不会被设置,但是 tmpString 在构造函数被调用之前被初始化,因为它在类初始化器中的位置。

在构造函数中初始化 tmpString 以解决问题。

于 2012-04-03T04:14:51.093 回答
0

初始订单。

当您新建 IPAddress 时,IPAddress.ipString 为空。

初始过程!

1、IP地址ipAdd;

2、ipString=空;

3、String tmpString = ipString.replaceAll("\.",""); //抛出异常

4、IPAddress ipAdd=新IP地址(testString);

5、ipString="130.191.208.70";

于 2012-04-03T04:15:08.857 回答