Java で文字列を数値に変換するとき、NumberFormatException が発生することがあります。業務システムやバッチ処理では特に頻出する例外であり、原因が分かりづらいケースも多いです。
本記事では、よくある原因パターンと実際の対処方法をまとめています。Java 初心者の方や、業務でよく扱う方の参考になれば幸いです。
NumberFormatException とは?
NumberFormatException は、文字列を数値型へ変換しようとした際に、変換不可能な値だった場合に発生する例外です。
例:
Java では parseInt()、parseDouble()、valueOf() などで発生する可能性があります。
よくある原因と対処方法
① 文字列に空白(スペース或いは改行)が含まれている
CSV・Excel・外部連携データでよく発生するケースです。
対処方法(trim を使う)
② 数値ではない文字が混ざっている
例:12a3、10,000、1_000(外部データ)
対処方法(正規表現で数字以外を除去)
③ NULLや空文字が入ってくる
業務バッチで一番多いパターンです。null チェックなしで parseInt() を呼ぶと例外になります。
対処方法(null/空チェック)
または Optional を活用する方法もあります。
④ 全角数字(全角スペースや全角記号)が混ざっている
ユーザー入力や Excel 由来のデータで発生します。
対処例(全角→半角変換)
ライブラリを使う場合は Apache Commons StringUtils.normalizeSpace() や ICU4J なども役立ちます。
⑤ 数値の桁が型の許容範囲を超えている
例:
対処方法(型を適切に選ぶ)
| 値の桁数 | 推奨型 |
|---|---|
| ~9桁 | int |
| ~18桁 | long |
| それ以上(金融・精度必要) | BigDecimal |
NumberFormatExceptionを防ぐための設計ポイント
-
外部データは必ずバリデーションする
-
null・空文字チェック必須
-
トリム処理を基本にする
-
例外をキャッチしてログに値を残す
例:
まとめ
NumberFormatException は単なる入力ミスだけでなく、空白・全角・記号・桁溢れ・nullなど、業務データ特有の問題が原因で発生する例外です。
本記事のポイントを踏まえれば、再発防止やバリデーション設計に役立つはずです。
