【发布时间】:2015-07-05 04:50:59
【问题描述】:
我对 Scala 很陌生,我不确定这是如何完成的。我没有运气用谷歌搜索它。 让我们假设代码是:
var arr = readLine().split(" ")
现在 arr 是一个字符串数组。假设我知道我输入的行是一系列数字,例如1 2 3 4,我想将arr转换为一个Int(或int)数组。
我知道我可以使用 .toInt 转换单个元素,但我想转换整个数组。
谢谢你,如果问题很愚蠢,我们深表歉意。
【问题讨论】:
我对 Scala 很陌生,我不确定这是如何完成的。我没有运气用谷歌搜索它。 让我们假设代码是:
var arr = readLine().split(" ")
现在 arr 是一个字符串数组。假设我知道我输入的行是一系列数字,例如1 2 3 4,我想将arr转换为一个Int(或int)数组。
我知道我可以使用 .toInt 转换单个元素,但我想转换整个数组。
谢谢你,如果问题很愚蠢,我们深表歉意。
【问题讨论】:
使用.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
【讨论】:
从Scala 2.13 开始,您可能希望使用String::toIntOption 以安全地将Strings 转换为Option[Int]s,从而处理无法转换的项目:
Array("1", "12", "abc", "123").flatMap(_.toIntOption)
// Array[Int] = Array(1, 12, 123)
【讨论】: