Scala中的字符串到Int

时间:2014-02-25 17:22:41

标签: scala

假设我需要在Scala中将String转换为Int。如果字符串不是数字,我想返回None而不是抛出异常。

我找到了以下solution

def toMaybeInt(s:String) = {
  import scala.util.control.Exception._
  catching(classOf[NumberFormatException]) opt s.toInt
}

有意义吗?你会改变/改进吗?

2 个答案:

答案 0 :(得分:6)

我使用scala.util.Try返回SuccessFailure进行可能引发异常的计算。

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