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]", ""))