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 - Fatal编程技术网

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
和pid
4464
。我将能够做到这一点,但只有以命令式的方式。我很难用一种实用的方式来解决这个问题

使用正则表达式可以解决这个问题,但我想看看如何使用函数编程实现类似的功能。

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“+”版本替换“”。