假设我需要在斯卡拉中将字符串转换为Int。如果字符串不是数字,我想返回None
而不是抛出异常。字符串到斯卡拉Int中
我发现下面solution
def toMaybeInt(s:String) = { import scala.util.control.Exception._ catching(classOf[NumberFormatException]) opt s.toInt }
是否有意义?你会改变/改善它吗?
假设我需要在斯卡拉中将字符串转换为Int。如果字符串不是数字,我想返回None
而不是抛出异常。字符串到斯卡拉Int中
我发现下面solution
def toMaybeInt(s:String) = { import scala.util.control.Exception._ catching(classOf[NumberFormatException]) opt s.toInt }
是否有意义?你会改变/改善它吗?
我会使用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)
}
为了得到一个选项,在任何情况下,无论是由于数量畸形可能出现的例外,
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
比使用'Try'其他(@ Brian的回答),我会命名方法'toIntOption'更符合标准Scala的名称一致。 –