我有一个问题。我在这里有这行代码。
map length [filter (/= ' ') someString]
我知道它会从someString中删除空格。但是可以使用过滤器从字符串中删除多个空格吗?我们只想删除空格和其他一些字符。
谢谢!
答案 0 :(得分:4)
你可以这样做:
filter (not . flip elem "<your chars here>")
示例:
ghci> filter (not . flip elem " .,") "This is an example sentence, which uses punctuation."
"Thisisanexamplesentencewhichusespunctuation"
只需将评论放在此处:要过滤掉两种情况(a-z和A-Z)的字母,您应该使用Data.Char
&#39; isLetter
函数。
答案 1 :(得分:4)
稍微短一点的方法是使用notElem
:
λ> filter (flip notElem " f") "foo bar"
"oobar"
答案 2 :(得分:1)
另一种方法是使用折叠来获取长度,如果您实际上不需要返回已过滤的字符串但只想要其长度。
f x charlist = foldl (\acc x -> if not $ x `elem` charlist then acc + 1 else acc) 0 x
charlist
是您禁止使用的字符列表。如果总是有固定列表,可以直接将其定义为顶级值,并在函数体中使用它,而不是将其作为参数传递。
使用列表推导的更简洁版本:
f x = length [z | z <- x, notElem z charlist]