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 返回 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)

【讨论】:

谢谢,但我现在需要返回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的主要内容,如果未能解决你的问题,请参考以下文章

Scala:将字符串转换为 Int 或 None

Scala的对字符串应用

将标头记录(或字符串/文件)添加到 Scala / Java 中的大文件中

Scala 2.11 中的类型化原语

Scala链表***

如何在 scala 中将 RDD[(int, string)] 转换为 Dataframe