这让我疯狂...... 必须是一种在字符串中删除所有非数字字符(或执行其他简单过滤)的方法。
示例:我想将电话号码(" +72(93)2342-7772"或" +1 310-777-2341")转换为简单的数字字符串(不是Int),例如" 729323427772"或" 13107772341"。
我尝试"[\\d]+".r.findAllIn(phoneNumber)
返回一个Iteratee然后我不得不将它们重新组合成一个字符串......似乎非常浪费。
我还提出:phoneNumber.filter("0123456789".contains(_))
但对其他情况变得乏味。例如,删除所有标点符号...我真的在使用正则表达式之后,所以它的应用范围比仅过滤数字更广泛。
任何人都有一个花哨的Scala单线程,这更直接吗?
答案 0 :(得分:17)
您可以使用filter
,将字符串视为字符序列,并使用isDigit
测试字符:
"+72 (93) 2342-7772".filter(_.isDigit) // res0: String = 729323427772
答案 1 :(得分:9)
您可以使用replaceAll
和Regex。
"+72 (93) 2342-7772".replaceAll("[^0-9]", "") // res1: String = 729323427772
答案 2 :(得分:0)
另一种方法是定义有效字符的集合,在本例中为
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 }
,过滤集合包含,例如使用其中任何一个
.vine-home-block-grapes:first-child {display: none;}