如何在scala中将字符串数组转换为int数组

时间:2015-04-26 21:31:25

标签: scala types casting

我对Scala很新,我不确定如何做到这一点。我没有运气就google了。 让我们假设代码是:

var arr = readLine().split(" ")

现在arr是一个字符串数组。假设我知道我输入的行是一系列数字,例如1 2 3 4,我想将arr转换为Int(或int)数组。

我知道我可以使用.toInt转换单个元素,但我想转换整个数组。

如果问题愚蠢,请感谢并道歉。

2 个答案:

答案 0 :(得分:10)

使用.map

将函数应用于集合的每个元素
scala> val arr = Array("1", "12", "123")
arr: Array[String] = Array(1, 12, 123)

scala> val intArr = arr.map(_.toInt)
intArr: Array[Int] = Array(1, 12, 123)

请注意,_.toInt表示法等同于x => x.toInt

scala> val intArr = arr.map(x => x.toInt)
intArr: Array[Int] = Array(1, 12, 123)

显然,如果其中一个元素不是整数,则会引发异常:

scala> val arr = Array("1", "12", "123", "NaN")
arr: Array[String] = Array(1, 12, 123, NaN)

scala> val intArr = arr.map(_.toInt)
java.lang.NumberFormatException: For input string: "NaN"
  at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
  at java.lang.Integer.parseInt(Integer.java:580)
  at java.lang.Integer.parseInt(Integer.java:615)
  at scala.collection.immutable.StringLike$class.toInt(StringLike.scala:272)
  ...
  ... 33 elided

答案 1 :(得分:0)

Scala 2.13开始,您可能想使用String::toIntOption以便将String s强制转换为Option[Int] s,从而处理无法转换的项目:

Array("1", "12", "abc", "123").flatMap(_.toIntOption)
// Array[Int] = Array(1, 12, 123)