0

この比較的単純な質問でお手数をおかけして申し訳ありませんが、replaceAll("\.","") を呼び出すときに null ポインター例外が発生し続けます。取得していません。

IPAddress の簡単な要約: 言及された最初のクラスには、IPAddressTester (後述) から文字列値が渡され、クラス IPAddress に ipString として格納されます。文字列自体は、###.###.###.## の形式になります。私の最終的な目標は、この文字列のピリオドを取り除き、結果のトークンを結合し、後で操作できるように整数に変換することです (hashCode メソッドを参照)。明らかに、このクラスは不完全であり、他の問題/問題がある可能性が非常に高いですが、現在のところ、replaceAll に起因する null ポインター エラーのみに焦点を当てています。

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つの文で簡単に答えられると思います(あまり侮辱的ではないことを願っています;-))

4

3 に答える 3

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("\\.","");
}
于 2012-04-03T04:10:14.333 に答える
1

初期化しています

   String tmpString 

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

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

于 2012-04-03T04:14:51.093 に答える
0

初注文。

IPAddressを新しくすると、IPAddress.ipStringはnullになります。

最初のプロセス!

1、IPアドレスipAdd;

2、ipString = null;

3、String tmpString = ipString.replaceAll( "\。"、 ""); //例外をスローします

4、IPAddress ipAdd = new IPaddress(testString);

5、ipString = "130.191.208.70";

于 2012-04-03T04:15:08.857 に答える