WORK/Java

[Java] NumberFormatException 원인과 해결 방법

Justin Mendes 2023. 3. 8. 10:17

자바에서 흔히 마주하는 NumberFormatException의 원인과 해결 방법을 알아보자.

 

 

1. NumberFormatException 원인

 

이름을 직관적으로 보면 "숫자포맷예외" 라고 생각할 수 있다. 뭔가 숫자로 포맷을 변환하고 싶은데 그게 안되는 거다.

 

아마 이 오류를 가장 많이 만나는 경우는 Integer.parseInt(문자열)를 사용할 때다. 문자열을 int 형으로 변환할 때 의도치 않게 숫자 외에 다른 녀석(int형으로 변환되지 않는) 때문에 NumberFormatException을 만나게 된다.

 

코드는 아래와 같다.

public class sample {
    public static void main(String[] args){

        String a = "777"; //숫자로만 구성된 문자열
        System.out.println(Integer.parseInt(a));

        String b = "777k"; //숫자 + 문자로 구성된 문자열
        System.out.println(Integer.parseInt(b));
    }
}

 

에러는 아래와 같다.

Exception in thread "main" java.lang.NumberFormatException: For input string: "777k"
	at java.base/java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
	at java.base/java.lang.Integer.parseInt(Integer.java:652)
	at java.base/java.lang.Integer.parseInt(Integer.java:770)
	at sample.main(sample.java:8)

 

위와 같은 경우 외에도 아래와 같은 경우에 오류가 발생한다.

String a = "777777777777777";
String a = "";

 


2. NumberFormatException 해결 방법

 

숫자로만 구성된 문자열이 맞는 지 확인하고 아닐 시에는 코드를 수정한다. 코드를 수정하는 방법 이외에  기본값을 세팅해주는 방법이 있다. 코드는 아래와 같다.

 

public static void main(String[] args){
        String a = "777"; //숫자로만 구성된 문자열
        System.out.println(Integer.parseInt(a));

        int c = 0;
        
        try {
            String b = "777k"; //숫자 + 문자로 구성된 문자열
            System.out.println(Integer.parseInt(b));
        }catch (NumberFormatException e){
            c = 1 ; 
        }
    }

 


 

오류에서 자유롭고 싶다.