Scala中的字符串到Int
Posted
技术标签:
【中文标题】Scala中的字符串到Int【英文标题】:String to Int in Scala 【发布时间】:2014-02-25 17:22:40 【问题描述】:假设我需要在 Scala 中将 String 转换为 Int。如果字符串不是数字,我想返回 None
而不是抛出异常。
我找到了以下solution
def toMaybeInt(s:String) = 导入 scala.util.control.Exception._ 捕捉(classOf [NumberFormatException])选择s.toInt这有意义吗?你会改变/改进它吗?
【问题讨论】:
除了使用Try
(@brian 的回答)之外,我将方法命名为toIntOption
以更符合标准的Scala 名称。
【参考方案1】:
我会使用 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)
【讨论】:
谢谢,但我现在需要返回Option
。
@Michael 使用toOption
。
Catch[+T].toOption
?
scala.util.Try("0".toInt).toOption
或类似的scala.util.Try("foo".toInt).toOption
将返回Some(0)
或None
。【参考方案2】:
为了在任何情况下获得一个选项,无论由于数字格式错误而可能出现的异常,
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
【讨论】:
以上是关于Scala中的字符串到Int的主要内容,如果未能解决你的问题,请参考以下文章