`NumberFormatException`은 자바에서 문자열을 숫자로 변환하려고 할 때 발생하는 예외입니다. 이 예외는 문자열이 올바른 숫자 형식이 아니라면 발생하게 됩니다.
**발생 원인:**
`NumberFormatException`은 주로 다음과 같은 상황에서 발생합니다:
1. **`Integer.parseInt()`, `Double.parseDouble()` 등의 메서드로 문자열을 숫자로 변환할 때**: 숫자로 변환하려는 문자열이 숫자 형식이 아닐 경우 예외가 발생합니다.
```java
String strNumber = "ABC";
int number = Integer.parseInt(strNumber); // 이 부분에서 NumberFormatException이 발생합니다.
```
2. **형변환(Casting)에서 문자열을 숫자로 변환할 때**: 문자열을 숫자 타입으로 강제 형변환(Casting)하려고 할 때, 문자열이 숫자로 변환될 수 없는 경우 예외가 발생합니다.
```java
String strNumber = "123";
double doubleNumber = (double) strNumber; // 이 부분에서 NumberFormatException이 발생합니다.
```
**해결 방법:**
`NumberFormatException`을 피하기 위해서는 문자열을 숫자로 변환하기 전에 해당 문자열이 유효한 숫자 형식인지 확인해야 합니다. 이를 위해 다음과 같은 방법을 사용할 수 있습니다:
1. **`try-catch` 구문 사용**: `try-catch` 구문을 사용하여 예외를 처리하고 변환할 수 없는 문자열에 대한 대체 값 또는 에러 메시지를 제공합니다.
```java
String strNumber = "ABC";
int number;
try {
number = Integer.parseInt(strNumber);
} catch (NumberFormatException e) {
// 변환할 수 없는 문자열에 대한 예외 처리
number = 0; // 기본값 또는 대체 값 지정
}
```
2. **정규 표현식을 사용하여 유효성 검사**: 문자열이 숫자 형식인지 정규 표현식을 사용하여 확인한 후에 변환합니다.
```java
String strNumber = "123";
if (strNumber.matches("\\d+")) {
int number = Integer.parseInt(strNumber); // 숫자 형식이면 변환
} else {
// 숫자 형식이 아닌 경우에 대한 처리
}
```
3. **`try-catch` 없이 `Integer.parseInt()` 사용 시 예외 처리**: `try-catch`를 사용하지 않고 `parseInt()` 메서드를 사용할 때는 `parseInt()` 메서드 이전에 문자열이 숫자 형식인지 검사해야 합니다.
```java
String strNumber = "ABC";
if (strNumber.matches("\\d+")) {
int number = Integer.parseInt(strNumber); // 숫자 형식이면 변환
} else {
// 숫자 형식이 아닌 경우에 대한 처리
}
```
주어진 문자열이 유효한 숫자 형식인지 확인하고 적절하게 예외 처리를 수행함으로써 `NumberFormatException`을 피할 수 있습니다. 이렇게 하면 프로그램의 안정성과 정확성을 높일 수 있습니다.
'JAVA > EXCEPTION' 카테고리의 다른 글
ClassNotFoundException 발생원인과 해결방법 (0) | 2023.07.21 |
---|---|
NumberFormatException Cause and solution (0) | 2023.07.21 |
InterruptedException Cause and solution (0) | 2023.07.21 |
InterruptedException 발생원인과 해결방법 (0) | 2023.07.21 |
IllegalArgumentException Cause and solution (0) | 2023.07.21 |