在Scala中将字符串转换为整数的最简洁方法是什么?

4
在Java中,我可以使用以下两个语句将字符串转换为整数,这能够处理异常:
// we have some string s = "abc"
int num = 0;
try{ num = Integer.parseInt(s); } catch (NumberFormatException ex) {}

然而,我在Scala中找到的方法总是使用try-catch/match-getOrElse的方式,像下面这样,其中包含几行代码,似乎有点冗长。

// First we have to define a method called "toInt" somewhere else
def toInt(s: String): Option[Int] = {
  try{
    Some(s.toInt)
  } catch {
    case e: NumberFormatException => None
  }
}

// Then I can do the real conversion
val num = toInt(s).getOrElse(0)

这是在Scala中将字符串转换为整数的唯一方式(能够处理异常),还是有更简洁的方式?


1
安全地在Scala中解析字符串为数字 - Marco Acierno
1个回答

13

考虑

util.Try(s.toInt).getOrElse(0)

这将返回一个整数值,同时捕获可能出现的异常。因此,

def toInt(s: String): Int = util.Try(s.toInt).getOrElse(0)

或者如果更喜欢使用 选项

def toInt(s: String): Option[Int] = util.Try(s.toInt).toOption

如果转换失败,则返回None


3
你可以省略对 toOption 方法的调用。 - Régis Jean-Gilles
1
@RégisJean-Gilles 谢谢 :) 已更新 - elm
抱歉,我的表述不够清晰。你可以放弃那个使用 getOrElse 并返回 Int 类型的版本,因为 Try 本身就有这个方法。但是你不能放弃返回 Option[Int] 的版本,因为 Try 不是一个 Option - Régis Jean-Gilles

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接