Pierre Andrews : Safely parsing Strings to numbers in Scalaに詳しく書いてある。
変換時の注意点
- 異常時の
java.lang.NumberFormatException
をキャッチしないといけない
変換できたときは Some(10)
のようなものが返り、そうでなければ None
が反るような実装にするといい:
def safeStringToInt(str: String): Option[Int] = {
import scala.util.control.Exception._
catching(classOf[NumberFormatException]) opt str.toInt
}
さらにimplicit classにすると汎用的に使いやすくなる:
object StringUtils {
implicit class StringImprovements(val s: String) {
import scala.util.control.Exception._
def toIntOpt = catching(classOf[NumberFormatException]) opt s.toInt
}
}
もっといい方法がないかStackOverflowなども調べてみたが、どうやら上記のやりかたが一種の定型文化しているみたいだった。Scalaがデフォルトで "1".toIntOption
とか提供してくれても良さそうなものだが。
ちなみに、scalaz なら "1".parseInt.toOption
らしい。