ひよっこ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】StringTokenizerクラスで文字列分割

文字列をカンマやスペースなど、任意の区切り文字で分割する方法。 やり方は多分いろいろあるけど、今回はStringTokenizerクラスを使用するやり方。 [crayon-5daea6195db4d2 …

【Java】正規表現で文字列チェック

正規表現を使用して文字列をチェックする方法。 正規表現をマスターしていればいくらでも応用が効く部分だけど、なかなかマスターは難しそうなので、よく使いそうなチェックをメモメモ。 [crayon-5dae …

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

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

【Java】前後のスペースを削除(trim)

文字列の前後のスペースを削除するには、trim関数を使用する。

  ただ、trim関数で削除できるのは半角スペースのみで、全 …

【Java】日付の計算(加算と減算)

システム日付や任意の日付に対して加算や減算を行うには、Calendarクラスを使用する。 下のサンプルでは、システム日付を保持したCalendarオブジェクトに対して日数などの加減算を行い、結果をyy …