Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Scala中从字符串中除去除数字以外的所有内容(快速一行)_Scala_Filter - Fatal编程技术网

如何在Scala中从字符串中除去除数字以外的所有内容(快速一行)

如何在Scala中从字符串中除去除数字以外的所有内容(快速一行),scala,filter,Scala,Filter,这让我快发疯了。。。必须有一种方法可以去除字符串中的所有非数字字符(或执行其他简单过滤) 示例:我想将电话号码(“+72(93)2342-7772”或“+1310-777-2341”)转换为简单的数字字符串(而不是Int),例如“72932342772”或“13107772341” 我尝试了“[\\d]+”.r.findAllIn(phoneNumber),它返回一个Iteratee,然后我不得不以某种方式将它们重新组合成一个字符串。。。看起来浪费得可怕 我还提出了:phoneNumber.fi

这让我快发疯了。。。必须有一种方法可以去除字符串中的所有非数字字符(或执行其他简单过滤)

示例:我想将电话号码(“+72(93)2342-7772”或“+1310-777-2341”)转换为简单的数字字符串(而不是Int),例如“72932342772”或“13107772341”

我尝试了
“[\\d]+”.r.findAllIn(phoneNumber)
,它返回一个Iteratee,然后我不得不以某种方式将它们重新组合成一个字符串。。。看起来浪费得可怕

我还提出了:
phoneNumber.filter(“0123456789.contains()))
但对于其他情况来说,这会变得单调乏味。例如,删除所有标点符号。。。我真的想要一种能与正则表达式一起工作的东西,所以它的应用范围比过滤掉数字更广


任何人对此都有更直接的Scala单行程序吗?

您可以使用
过滤器
,将字符串视为字符序列,并使用
isDigit
测试字符:

"+72 (93) 2342-7772".filter(_.isDigit) // res0: String = 729323427772

您可以使用
replaceAll
和Regex


“+72(93)2342-7772”.replaceAll([^0-9]”,“”)//res1:String=72932342772

另一种方法,在本例中定义有效字符的集合

val d = '0' to '9'
因此,对于
val a=“+72(93)2342-7772”
,在集合包含时进行过滤,例如使用以下任一项

for (c <- a if d.contains(c)) yield c

a.filter(d.contains)

a.collect{ case c if d.contains(c) => c }
(c)的


请注意,您也可以使用
\D
而不是
[^0-9]
。可能应该像电影中那样使用“555”。谢谢……简单的回答……但是,由于我特别寻找正则表达式解决方案,我接受了@Spork–谢谢!