Scala-删除空格
我有一根像这样的线Scala-删除空格,scala,Scala,我有一根像这样的线 svchost.exe 4464 Services 0 47.656 K 请注意,有许多空格,每种情况下的空格数量都不同 我想提取名称svchost.exe和pid4464。我将能够做到这一点,但只有以命令式的方式。我很难用一种实用的方式来解决这个问题 使用正则表达式可以解决这个问题,但我想看看如何使用函数编程实现类似的功能。Easy peasy: val s = "svchost.exe
svchost.exe 4464 Services 0 47.656 K
请注意,有许多空格,每种情况下的空格数量都不同
我想提取名称svchost.exe
和pid4464
。我将能够做到这一点,但只有以命令式的方式。我很难用一种实用的方式来解决这个问题
使用正则表达式可以解决这个问题,但我想看看如何使用函数编程实现类似的功能。Easy peasy:
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(“+”)
,利用接受正则表达式的事实:
s.split(" +") //Array(svchost.exe, 4464, Services, 0, 47.656, K)
不需要后期筛选。这实际上不是一个好方法,但是:
(s,s.drop(1)+" ").zipped.filter(_!=' ' || _!=' ')._1.split(' ')
如果不是字符串的话,这是一种使用的方法。我不完全确定这是否回答了您的问题;它可能不是,因为它使用正则表达式,但同样,其他一些答案也是如此,这至少使用了模式匹配 使用正则表达式:
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
,您还可以覆盖其他类型的空白,这可能与上述情况有关。(制表符?我将s.split(“”).filter(u.length>0)
,但处理方式相同。好吧,假设s.split(“+”)
被问题的前提所禁止。我将用@Tomasz“+”版本替换“”。