我有一个如下所示的字符串:
"1,100,53,5000,23,3,3,4,5,5"
我想简单地将其转换为不同Integer元素的数组。看起来像:
Array(1, 100, 53, 5000, 23, 3, 4, 5)
Scala中是否有String
方法可以帮助解决这个问题?
答案 0 :(得分:14)
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)
显然,如果数组中的某个值不是整数,则会引发异常。
编辑:没有看到'仅限于数字的'部分,修正了我的答案。
答案 1 :(得分:7)
另一个版本可以很好地处理不可解析的值,只是忽略它们。
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)
答案 2 :(得分: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(_))
}
答案 3 :(得分:0)
从Scala 2.13
开始,如果您希望无法投射项目,则可能要使用String::toIntOption
,以便将这些String
个拆分的对象安全地投射到Option[Int]
并使用flatMap
消除它们:
"1,100,53s,5000,4,5,5".split(',').flatMap(_.toIntOption).distinct
// Array[Int] = Array(1, 100, 5000, 4, 5)