ひよっこ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】String型とint型の型変換

文字列と数値の型変換を行うことは結構あって、一度覚えてしまえば忘れることはないと思うけど念のためメモ。 まずは文字列を数値に変換する方法。 [crayon-5c0fab7183456835788158 …

【Java】String.formatで文字列を成形する

文字列を動的に組み立てる方法としては、

のようなやり方が一番単純。だと思う。   で、もう少しだけ可読性やら拡張性やらを考慮 …

【Java】nullか空文字のチェック(isNullOrEmpty)

文字列が「nullもしくは空文字」であることをチェックする場合、C#ではstringクラスにisNullOrEmptyという便利なメソッドが用意されていたりするけど、Javaにはそれがない。 というこ …

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

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

【Java】System.out.println()の入力ショートカット

毎度お馴染みの標準出力関数、System.out.println()。 Eclipseのエディタ上で”sysout”と入力してからCtrl+Spaceキーでショートカット入力が …