Scala 如何安全地转换字符串并从中提取整数并返回集合

Scala 如何安全地转换字符串并从中提取整数并返回集合,scala,Scala,我有一组字符串,看起来像: "user-123" "user-498" "user-9891" 我想返回一组整数,如下所示: 123 498 9891 val mySet = Seq("user-123","user-498","user-9891") mySet.map(_.replaceAll("[^\\d]", "")) 我可以这样做: val mySet = // .... mySet.map(x => x.replace("user-").toInt) 但是,如果toI

我有一组字符串,看起来像:

"user-123"
"user-498"
"user-9891"
我想返回一组整数,如下所示:

123
498
9891
val mySet = Seq("user-123","user-498","user-9891")
mySet.map(_.replaceAll("[^\\d]", ""))
我可以这样做:

val mySet = // ....

mySet.map(x => x.replace("user-").toInt)

但是,如果toInt解析失败,它将崩溃,有什么更安全的方法可以做到这一点呢?

您可以检查将成功转换为
Int的字符串:

mySet.map(_.stripPrefix("user-")).collect { case x if x.forall(_.isDigit) => x.toInt }

您可以检查将成功转换为
Int
的字符串:

mySet.map(_.stripPrefix("user-")).collect { case x if x.forall(_.isDigit) => x.toInt }

要忽略失败的字符串,请执行以下操作:

mySet.flatMap(s => Try(s.replace("user-", "").toInt).toOption)

要忽略失败的字符串,请执行以下操作:

mySet.flatMap(s => Try(s.replace("user-", "").toInt).toOption)
使用
isDigit()

Try(“user-1234.tocharray.filter(u.isDigit)
.foldLeft(“”)(a,b)=>a+b).toInt)
.getOrElse(0)
使用
isDigit()

Try(“user-1234.tocharray.filter(u.isDigit)
.foldLeft(“”)(a,b)=>a+b).toInt)

.getOrElse(0)

您可以使用简单的正则表达式仅保留数值

大概是这样的:

123
498
9891
val mySet = Seq("user-123","user-498","user-9891")
mySet.map(_.replaceAll("[^\\d]", ""))

可以使用简单正则表达式仅保留数值

大概是这样的:

123
498
9891
val mySet = Seq("user-123","user-498","user-9891")
mySet.map(_.replaceAll("[^\\d]", ""))