我知道这是一个古老的已回答问题,但恕我直言,这是更好的:
scala> :paste
// Entering paste mode (ctrl-D to finish)
val IntRegEx = "(\\d+)".r
def getValue(s: String): Option[Int] = s match {
case "inf" => Some(Integer.MAX_VALUE)
case IntRegEx(num) => Some(num.toInt)
case _ => None
}
// Exiting paste mode, now interpreting.
IntRegEx: scala.util.matching.Regex = (\d+)
getValue: (s: String)Option[Int]
scala> getValue("inf")
res21: Option[Int] = Some(2147483647)
scala> getValue("123412")
res22: Option[Int] = Some(123412)
scala> getValue("not-a-number")
res23: Option[Int] = None
当然,它不会抛出任何异常,但如果你真的想要它,你可以使用
getValue(someStr) getOrElse error("NaN")