在Haskell中,我没有发现任何关于如何剥离字符串(去除前导/尾随字符)的内容,也没有地方可以找到这样的strip或chomp函数(如果我错了,请纠正我)。
我该怎么办?
发布于 2013-01-10 06:39:59
看看Data.Text吧。使用Prelude的任何东西,比如Strings,通常性能都很差,特别是使用stripR这样的函数时。一些人认为这是过去的一个错误,因为它已经影响了许多(否则是合理的)接口,使其在文本数据中使用单链接字符列表(String)的低效。
您要查找的函数依次为:dropWhile、dropWhileEnd、dropAround、stripStart、stripEnd、strip。
请注意,对于基于字符相等的剥离,没有特定的函数。除非是像Data.Char.isSpace这样的非常常用的谓词,否则使用谓词给dropX设置别名并不能真正获得任何好处。
发布于 2013-01-10 06:38:22
首先,您应该使用Text (来自text包)而不是String,因为text要高效得多。
另外,text已经有了这个功能:
-- Remove leading and trailing white space from a string.
strip :: Text -> Text发布于 2013-01-10 06:39:39
更通用的方法是将谓词传递给strip函数,这样就可以使用stripL isSpace,例如删除所有前导空格。
然而,stripL只是dropWhile的一个别名。
对于末尾的剥离,可能更有效的版本使用foldr,
stripR :: (a -> Bool) -> [a] -> [a]
stripR pred = foldr keepOrDrop []
where
keepOrDrop c xs
| pred c = case xs of
[] -> []
_ -> c:xs
| otherwise = c:xs这可以在不遍历整个输入列表的情况下开始生成输出,并且如果没有满足输入的谓词的元素的长时间运行,则是有效的。
https://stackoverflow.com/questions/14247647
复制相似问题