2012-04-03 76 views
0

使用這個相對簡單的問題困擾大家的道歉,但是當調用replaceAll(「\。」,「」)時,我一直運行到空指針異常,我想知道爲什麼。毫無疑問,我只是沒有得到而已。Java:使用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(); 

    } 
} 

再次,我真誠的歉意打擾你們這一點,但我猜這個問題將可能有一個簡單的一兩句話回答(希望這將不ahem太侮辱;-))。

回答

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

非常好!你是聖人!謝謝一堆! :d – user1309459 2012-04-03 04:13:25

1

你初始化

String tmpString 

與空ipString。在構造函數被調用之前,IpString不會被設置,但是在構造函數被調用之前,tmpString會被初始化,因爲它被放置在類初始值設定項中。

在構造函數中初始化tmpString以解決問題。

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」;