ひよっこSEのコツコツ備忘録

システム開発に携わる中で、知識として学んだことや覚えたことを書き綴っています。

Java

【Java】数値に変換できる文字列かチェック

投稿日:2016年8月13日 更新日:

文字列を数値に変換できるかどうかのチェック。

apacheのライブラリに便利な関数があるみたいだけど、Java標準の機能だけでチェックする2つのやり方をメモ。

try-catchでNumberFormatExceptionによるチェック

これは、「とりあえず文字列を数値に変換してみよう!例外発生したらその文字列は数値じゃない!」という判断。strTargetが数値に変換できないような文字列であれば、NumberFormatExceptionが投げられるのでそれをキャッチして判定する。

サンプルコード

 

100万回実行時の処理時間

strTargetに対していきなり数値変換を行っているやり方なので、問題無く数値に変換できるような値であれば無駄が無く高速。ただし、変換に失敗する場合は例外オブジェクトを生成するコストが高いためパフォーマンスが落ちる。

100万回すべて変換成功⇒     47,964,646ns(約47ミリ秒)
100万回すべて変換失敗⇒1,370,820,732ns(約1,370ミリ秒)

 

正規表現によるチェック

もうひとつは正規表現によるチェック。srTargetが数値として妥当な文字列かどうかを正規表現でチェックして、チェックOKの場合のみ数値に変換する流れ。

サンプルコード

 

100万回実行時の処理時間

数値変換の前に正規表現により逐一チェック処理が走るため、変換成功時でも多少時間がかかる。ただし、変換不可の文字列については予め行われているチェック処理により例外の発生を防げるため、大幅な速度低下にはならない。

100万回すべて変換成功⇒709,987,365ns(約709ミリ秒)
100万回すべて変換失敗⇒493,286,375ns(約493ミリ秒)

 

どっちの方法が良いのかどうか正解はないけど、その文字列に数値以外の値が入ってくることが通常は考えられないような、念のため行うチェックのような場合はNumberFormatExceptionによるチェックで良い気がするし、数値以外の文字列が入ってくることがザラにあるような場合は予め正規表現でチェックする方が良いかな~。

-Java

執筆者:

関連記事

【Java】for文と拡張for文の速度比較

普通のfor文と拡張for文、以前どこかで「拡張for文は内部的に云々カンヌンなため、パフォーマンス的には通常のfor文に劣る」っていう記述を見たことがある気がしたので、実際に速度を比べてみた。 [c …

【Java】ファイルダウンロード処理

サーバーに保管されているファイルをダウンロードする方法。 ダウンロード時の動作についてはレスポンスに設定する”Content-Disposition”の値次第になっていて、&# …

【Java】splitメソッドで文字列分割

StringTokenizerを使用した文字列の分割は推奨されていないようなので、主流(?)なsplitメソッドによる文字列分割。 使い方としては、第1引数に区切り文字を渡してあげると、分割された文字 …

【Java】ファイルの存在チェック

任意のパスにファイルもしくはディレクトリが存在しているかどうかは、Fileクラスを使えば簡単にチェックできる。

関連

【Java】String型とDate型の型変換

Date型からString型、String型からDate型への変換方法。 こういった型変換はしばしば行うことがあるけど、その都度やり方を調べている気がするのでメモ。 これはSimpleDateForm …