假设我需要在Scala中将String转换为Int。如果字符串不是数字,我想返回None
而不是抛出异常。
我找到了以下solution
def toMaybeInt(s:String) = { import scala.util.control.Exception._ catching(classOf[NumberFormatException]) opt s.toInt }
有意义吗?你会改变/改进吗?
答案 0 :(得分:6)
我使用scala.util.Try
返回Success
或Failure
进行可能引发异常的计算。
scala> val zero = "0"
zero: String = 0
scala> val foo = "foo"
foo: String = foo
scala> scala.util.Try(zero.toInt)
res5: scala.util.Try[Int] = Success(0)
scala> scala.util.Try(foo.toInt)
res6: scala.util.Try[Int] = Failure(java.lang.NumberFormatException: For input string: "foo")
所以,toMaybeInt(s: String)
变为:
def toMaybeInt(s:String) = {
scala.util.Try(s.toInt)
}
答案 1 :(得分:3)
在任何情况下获得选项,无论数字畸形可能导致的例外情况,
import scala.util.Try
def toOptInt(s:String) = Try(s.toInt) toOption
然后
scala> toOptInt("123")
res2: Option[Int] = Some(123)
scala> toOptInt("1a23")
res3: Option[Int] = None
此外,请考虑
implicit class convertToOptInt(val s: String) extends AnyVal {
def toOptInt() = Try(s.toInt) toOption
}
因此
scala> "123".toOptInt
res5: Option[Int] = Some(123)
scala> "1a23".toOptInt
res6: Option[Int] = None