Scala - 删除空格

时间:2012-10-21 17:36:00

标签: scala

我有一个看起来像这样的字符串

svchost.exe                   4464 Services                   0        47.656 K

请注意,每种情况下都有很多空格和空格量不同

我想提取名称svchost.exe和pid 4464。我能够做到这一点,但只能采取必要的方式。我很难以功能性的方式思考解决这个问题。

有可能用正则表达式来解决这个问题,但我想看看你是如何使用函数式编程做的。

4 个答案:

答案 0 :(得分:10)

利用String.split()接受正则表达式的事实:

s.split(" +")  //Array(svchost.exe, 4464, Services, 0, 47.656, K)

无需后期过滤。

答案 1 :(得分:5)

容易腻:

val s = "svchost.exe                   4464 Services                   0        47.656 K"
s.split(" ").filterNot(str => str == "")
// Array[java.lang.String] = Array(svchost.exe, 4464, Services, 0, 47.656, K)

<强>更新

或使用依赖于regexp beauty的s.split(" +")

答案 2 :(得分:1)

这实际上不是一个好方法,但是:

(s,s.drop(1)+" ").zipped.filter(_!=' ' || _!=' ')._1.split(' ')
如果它不是字符串,

将是一种使用方法。

答案 3 :(得分:0)

我不完全确定这是否能回答你的问题;它可能不会,因为它使用正则表达式,但是再一次,其他一些答案也是如此,这至少使用了模式匹配。

使用正则表达式:

val str = "svchost.exe                   4464 Services                   0        47.656 K"
val Process = """^([^\s]*)[\s]*([^\s]*).*$""".r
val Process(name, pid) = str

在REPL中输入,你得到:

name: String = svchost.exe
pid: String = 4464

通过使用\s,您还可以覆盖其他类型的空白,这可能与上述情况相关。 (制表符?)