2012-04-03 18 views
0

この比較的単純な質問で皆さんを悩ましくしてもお詫び申し上げますが、replaceAll( "\。"、 "")を呼び出すとnullポインタ例外が発生し続けます。間違いなく、それは私がちょうど得ていない単純なものです。Java: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クラス

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

    } 
} 

、これであなたのすべてを悩まため心からの謝罪が、私はこの質問はおそらく(これはできればしません、単純な1つのまたは2文の答えを持っています推測していますahemはあまりにも侮辱している;-))。

答えて

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を保存し、使用上のそれを計算する必要はありません:あなたはヌルipStringで

String tmpString 

を初期化している

public String getTmpString(){ 
    return ipString.replaceAll("\\.",""); 
} 
+0

優秀!あなたは聖人です!本当にありがとう! :D – user1309459

1

。コンストラクタが呼び出されるまでIpStringは設定されませんが、tmpStringはクラス初期化子の配置のためコンストラクタが呼び出される前に初期化されます。

問題を解決するには、コンストラクタでtmpStringを初期化します。

0

最初の注文。

IPAddressを新規作成すると、IPAddress.ipStringはnullになります。

初期プロセス!

1、IPAddress ipAdd;

2、ipString = null;

3、文字列tmpString = ipString.replaceAll( "\。"、 ""); //例外をスローする

4、IPAddress ipAdd = new IPaddress(testString);

5、ipString = "130.191.208.70";

関連する問題