2012-04-03 2 views
0

Toutes mes excuses pour vous déranger avec cette question relativement simple, mais je continue à courir dans une exception de pointeur nul en appelant replaceAll ("\.", "") Et je me demandais pourquoi .. Sans aucun doute, c'est quelque chose de simple que je ne reçois pas.Java: Exception de pointeur nul utilisant replaceAll

Bref résumé de IPAddress: La première classe mentionnée recevra une valeur String de IPAddressTester (mentionnée plus loin) qui sera stockée dans la classe IPAddress en tant que ipString. La chaîne elle-même sera de forme ###. ###. ###. ##. Mon objectif éventuel sera de supprimer les périodes de cette chaîne, de combiner les jetons qui en résultent et de les convertir en nombre entier pour une manipulation ultérieure (voir la méthode hashCode). De toute évidence, cette classe est incomplète et pourrait très bien avoir d'autres problèmes/problèmes, mais je me concentre actuellement uniquement sur l'erreur de pointeur nul résultant de replaceAll. Résumé de IPAddressTest: Exactement comme son nom l'indique, ceci teste IPAddress. Fondamentalement, un "pilote".

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 Classe

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

    } 
} 

Encore une fois, mes excuses les plus sincères pour vous embêter tout avec cela, mais je devine que cette question sera probablement un simple ou deux réponses de la phrase (qui, nous l'espérons pas ahem être trop insultant ;-)).

Répondre

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

Ce code devrait être dans le constructeur, après que vous ayez assigné une valeur à ipString (car sinon il est toujours nul).

public class IPAddress implements Comparable<IPAddress>{ 

    private final String ipString; 

    private final String tmpString; 

    //Constructor 
    public IPAddress(String ip){ 
     ipString = ip; 
     tmpString = ipString.replaceAll("\\.",""); 
    } 

} 

Ou peut-être que vous ne voulez pas stocker les tmpString du tout, et calculer l'utilisation:

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

Excellent! Tu es un saint! Merci beaucoup! :RÉ – user1309459

1

Vous initialisation

String tmpString 

avec un ipString nul. IpString n'est pas défini tant que le constructeur n'a pas été appelé, mais tmpString est initialisé AVANT que le constructeur ne soit appelé en raison de son placement dans l'initialiseur de classe.

Initialisez tmpString dans le constructeur pour résoudre le problème.

0

Ordre initial. Lors de la création de l'adresse IP, l'adresse IPAddress.ipString est nulle.

Le processus initial!

1, IPAddress ipAdd;

2, ipString = null;

3, Chaîne tmpString = ipString.replaceAll ("\.", ""); // throw Exception

4, IPAddress ipAdd = new AdresseIP (testString);

5, ipString = "130.191.208.70";