[JAVA] 자바 NumberFormatException 원인/예외처리해결
- 언어/Java
- 2020. 5. 17.
[JAVA] 자바 NumberFormatException 원인/예외처리해결
NumberFormatException 은 프로그램 코딩시 종종 일어나는 오류입니다.
영어 그대로 해석하면 숫자형 포맷 오류 발생입니다.
문자를 숫자로 변경시도하다가 에러가 발생하는 경우입니다.
(Double.parseDouble(), Float.parseFlost() 등등 다른 자료형변환 함수도 포함)
자세하게 케이스를 분류해보면
case1. 숫자로 변경할시 숫자형이 아닌 문자열일 경우입니다. 은근히 이런경우 많습니다.
String codeB = "123o"; // 문자형 변수 codeB 에 문자 123O을 입력 123 + O(알파벳 대문자 O)
System.out.println(Integer.parseInt(codeB)) // 정수아닌 문자가 포함되어 에러발생
case2. 변경하는 자료형보다 범위가 큰경우
String codeC = "123123123123123123123123";
System.out.println(Integer.parseInt(codeC)) // int 범위보다 큰 정수여서 에러발생
case3. null 입력시
String codeD = null;
System.out.println(Integer.parseInt(codeD)) // null을 변환시키려고 해서 에러발생
case4. 문자 앞뒤로 공백이 있는경우
String codeE = " 123 ";
System.out.println(Integer.parseInt(codeE)) // 123 문자열 앞뒤에 공백이 있어서 에러발생
아래 샘플예제에서 확인해보시죠.
package joon;
public class codeTest {
public static void main(String[] args) throws Exception{
String codeA = "123"; // 문자형 변수 codeA 에 문자 123을 입력
System.out.println(Integer.parseInt(codeA)); // codeA를 숫자로 변환
String codeB = "123o"; // 문자형 변수 codeB 에 문자 123o을 입력 123 + o(알파벳o)
System.out.println(Integer.parseInt(codeB)); // codeB를 숫자로 변환
}
}
실행결과 입니다. 아래와 같이 Exception 에러가 발생하였습니다.
java.lang.NumberFormatException : for input string: "123o"
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
at java.lang.Integer.parseInt(Integer.java:580)
at java.lang.Integer.parseInt(Integer.java:615)
at joon.codeTest,main(codeTest.java:12)
그럼 만약 입력받은 변수가 문자가 들어왔을때 어떻게 처리를 하면될까요?
이럴경우에는 아래와 같이 try 캐치를 이용하여 Exception 관리를 해주면됩니다.
package joon;
public class codeTest {
public static void main(String[] args) throws Exception{
String codeA = "";
try{
codeA = "123o";
System.out.println(Integer.parseInt(codeA));
}catch(NumberFormatException e){
//NumberFormatExcetion 발생시 에러 처리
codeA = "100"; // 디폴트 값이 있으면 설정
System.out.println(Integer.parseInt(codeA));
}catch(Exception e){
e.printStackTrace();
}
}
}
NumberFormatException 에러처리 해결방법 이였습니다.
'언어 > Java' 카테고리의 다른 글
[JAVA] 자바 상수(Constant) 사용법! 하드코딩 하지말자 (0) | 2020.05.20 |
---|---|
[JAVA] 자바 특정 문자열 포함 확인 및 찾기(contains/indexof/matches) (0) | 2020.05.19 |
[JAVA] 자바 오버로딩과 오버라이딩 개념 완벽정리 (0) | 2020.05.16 |
[JAVA] 자바 다중반복문, for문 한번에 탈출하기 (0) | 2020.05.14 |
[JAVA] 자바 문자열 자르기 split(), StringTokenizer 차이 비교 (0) | 2020.05.14 |