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

时间:2015-05-19 20:55:04

标签: scala filter

这让我疯狂...... 必须是一种在字符串中删除所有非数字字符(或执行其他简单过滤)的方法。

示例:我想将电话号码(" +72(93)2342-7772"或" +1 310-777-2341")转换为简单的数字字符串(不是Int),例如" 729323427772"或" 13107772341"。

我尝试"[\\d]+".r.findAllIn(phoneNumber)返回一个Iteratee然后我不得不将它们重新组合成一个字符串......似乎非常浪费。

我还提出:phoneNumber.filter("0123456789".contains(_)) 对其他情况变得乏味。例如,删除所有标点符号...我真的在使用正则表达式之后,所以它的应用范围比仅过滤数字更广泛。

任何人都有一个花哨的Scala单线程,这更直接吗?

3 个答案:

答案 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;}