2012-04-03 4 views
0

이 간단한 질문으로 모두 귀찮게 해달라고 사과하지만 replaceAll ("\.", "")을 호출 할 때 null 포인터 예외로 계속 실행됩니다. 이유는 궁금합니다. 의심의 여지없이 그것은 내가 얻지 못하는 단순한 무언가이다.Java : replaceAll을 사용한 Null 포인터 예외

간략한 요약 IPAddress : 언급 된 첫 번째 클래스는 ipAddress 클래스에서 IPAddress 클래스에 저장 될 IPAddressTester (이후 언급 함)의 String 값을 전달합니다. 문자열 자체는 ###. ###. ###. ## 형식입니다. 궁극적 인 목표는이 문자열의 마침표를 제거하고 결과 토큰을 결합한 다음 나중의 조작을 위해 정수로 변환하는 것입니다 (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(); 

    } 
} 

다시 말하지만, 진심이 당신의 모든 귀찮게에 대한 사과,하지만 난 아마 간단한 하나 또는 두 개의 문장 대답을 (해야합니다이 질문을 추측하고있어 어떤 희망하지 않습니다 에헴 너무 모욕됩니다 ;-)). (그렇지 않으면 여전히 널이기 때문에) 당신이 실제로 ipString에 값을 할당 한 후

답변

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

그 코드는 생성자에 있어야합니다.

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

우수! 너는 성자 야! 무리 감사! :디 – user1309459

1

. 생성자가 호출 될 때까지 IpString이 설정되지 않지만 tmpString은 클래스 이니셜 라이저의 배치로 인해 생성자가 호출되기 전에 초기화됩니다.

문제를 해결하려면 생성자에서 tmpString을 초기화하십시오.

0

초기 주문.

IPAddress를 새로 작성하면 IPAddress.ipString이 null입니다.

초기 프로세스!

1, IPAddress ipAdd;

2, ipString = null;

3, 문자열 tmpString = ipString.replaceAll ("\.", ""); // 예외를 throw

4, IPAddress ipAdd = new IPaddress (testString);

5, ipString = "130.191.208.70";