자바에서 흔히 마주하는 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 ;
}
}
오류에서 자유롭고 싶다.
'WORK > Java' 카테고리의 다른 글
[Java] NullPointerException 원인과 해결 방법 (0) | 2023.03.08 |
---|---|
[프로그래머스/Java] 하샤드 수 (0) | 2022.04.10 |
[프로그래머스/Java] 콜라츠 추측 (0) | 2022.04.10 |
[프로그래머스/Java] 행렬의 덧셈 (0) | 2022.04.10 |