Java: исключение нулевого указателя с использованием replaceAll - PullRequest
0 голосов
/ 03 апреля 2012

Извиняюсь за то, что беспокою всех вас этим относительно простым вопросом, но я продолжаю сталкиваться с исключением нулевого указателя при вызове replaceAll ("\.", ""), И мне было интересно, почему ... Несомненно, это что-то простое, что яЯ просто не получаю.

Краткое описание IPAddress: первому упомянутому классу будет передано значение String из IPAddressTester (упомянутое впоследствии), которое будет храниться в классе IPAddress как ipString.Сама строка будет иметь вид ###. ###. ###. ##.Моя конечная цель состоит в том, чтобы убрать периоды этой строки, объединить полученные токены и преобразовать в целое число для последующей манипуляции (см. Метод hashCode).Очевидно, что этот класс неполон, и у него вполне могут быть другие проблемы / проблемы, но в настоящее время я сосредотачиваюсь только на ошибке нулевого указателя, возникающей из replaceAll.

Краткое описание IPAddressTest: Точно так же, как следует из его названия, этот тестАйпи адрес.В основном "водитель".

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

    }
}

Опять же, мои искренние извинения за то, что беспокою вас всех этим, но я предполагаю, что у этого вопроса, вероятно, будет простой ответ из одного или двух предложений (что, надеюсь, не гм будет слишком обидно; -)).

Ответы [ 3 ]

2 голосов
/ 03 апреля 2012
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("\\.","");
}
1 голос
/ 03 апреля 2012

Вы инициализируете

   String tmpString 

с нулевой ipString. IpString не устанавливается до тех пор, пока не будет вызван конструктор, однако tmpString инициализируется ДО вызова конструктора из-за его размещения в инициализаторе класса.

Инициализируйте tmpString в конструкторе для решения проблемы.

0 голосов
/ 03 апреля 2012

Начальный порядок.

при новом IP-адресе IPAddress.ipString имеет значение null.

Начальный процесс!

1, IPAddress ipAdd;

2, ipString = null;

3, String tmpString = ipString.replaceAll ("\.", "");// выбросить исключение

4, IP-адрес ipAdd = новый IP-адрес (testString);

5, ipString = "130.191.208.70";

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...