11

我有一个如下所示的字符串:

"1,100,53,5000,23,3,3,4,5,5"

我想简单地把它变成一个不同 Integer 元素的数组。看起来像:

Array(1, 100, 53, 5000, 23, 3, 4, 5)

Scala中有没有一种String方法可以帮助解决这个问题?

4

4 回答 4

18
scala> "1,100,53,5000,23,3,3,4,5,5".split(",").map(_.toInt).distinct
res1: Array[Int] = Array(1, 100, 53, 5000, 23, 3, 4, 5)

显然,如果数组中的值之一不是整数,则会引发异常。

编辑:没有看到“仅不同的数字”部分,修正了我的答案。

于 2013-11-03T01:45:46.060 回答
8

另一个版本很好地处理不可解析的值,只是忽略它们。

scala> "1,100,53,5000,will-not-fail,23,3,3,4,5,5".split(",").flatMap(maybeInt => 
    scala.util.Try(maybeInt.toInt).toOption).distinct
res2: Array[Int] = Array(1, 100, 53, 5000, 23, 3, 4, 5)
于 2013-11-03T04:07:15.610 回答
2

添加了对可解析为 Int 的字符串的类型检查:

package load.data

object SplitArray {

  def splitArrayintoString(s: String): Set[Int] =
    {
      val strArray = s.split(",")
      strArray filter isParseAbleAsInt map (_.toInt) toSet
    }

  private def isParseAbleAsInt(str: String): Boolean =
    str.forall(Character.isDigit(_))

}
于 2013-11-03T01:51:07.917 回答
1

开始Scala 2.13,如果您期望无法转换的项目,您可能希望使用String::toIntOption以安全地将这些 splitString转换为Option[Int]s 并使用 a 消除它们flatMap

"1,100,53s,5000,4,5,5".split(',').flatMap(_.toIntOption).distinct
// Array[Int] = Array(1, 100, 5000, 4, 5)
于 2019-01-23T20:38:54.573 回答