Java:使用replaceAll的空指针异常

时间:2012-04-03 04:07:53

标签: java nullpointerexception period replaceall

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

IPAddress简介: 提到的第一个类将从IPAddressTester(后面提到)传递一个String值,它将作为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 Class

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();

    }
}

再一次,我真诚的为此打扰你们所致,但我猜这个问题可能会有一个简单的一两句话答案(希望不会太过于侮辱他们;) ))。

3 个答案:

答案 0 :(得分:2)

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

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

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("\\.","");
}

答案 1 :(得分:1)

您正在初始化

   String tmpString 

使用null ipString。在调用构造函数之前,IpString不会被设置,但是在调用构造函数之前,tmpString会被初始化,因为它位于类初始值设定项中。

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

答案 2 :(得分:0)

初始订单。

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

最初的过程!

1,IPAddress ipAdd;

2,ipString = NULL;

3,String tmpString = ipString.replaceAll(“\。”,“”); //抛出异常

4,IPAddress ipAdd = new IPaddress(testString);

5,ipString = “130.191.208.70”;