Eri*_*and 47 string haskell trim removing-whitespace
如何从字符串的开头和结尾修剪空格?
trim " abc "
=>
"abc"
Run Code Online (Sandbox Code Playgroud)
编辑:
好的,让我更清楚一点.我不明白字符串文字与字符串的处理方式如此不同.
我想这样做:
import qualified Data.Text as T
let s :: String = " abc "
in T.strip s
Run Code Online (Sandbox Code Playgroud)
这在Haskell有可能吗?我正在使用-XOverloadedStrings,但这似乎只适用于文字.
Tho*_*son 56
如果您有严格的文本处理需求,请使用texthackage中的包:
> :set -XOverloadedStrings
> import Data.Text
> strip " abc "
"abc"
Run Code Online (Sandbox Code Playgroud)
如果你太顽固地使用text并且不喜欢反向方法的低效率,那么也许(我的意思是MAYBE)类似下面的东西会更有效:
import Data.Char
trim xs = dropSpaceTail "" $ dropWhile isSpace xs
dropSpaceTail maybeStuff "" = ""
dropSpaceTail maybeStuff (x:xs)
| isSpace x = dropSpaceTail (x:maybeStuff) xs
| null maybeStuff = x : dropSpaceTail "" xs
| otherwise = reverse maybeStuff ++ x : dropSpaceTail "" xs
> trim " hello this \t should trim ok.. .I think .. \t "
"hello this \t should trim ok.. .I think .."
Run Code Online (Sandbox Code Playgroud)
我写这在假设的空间长度将是最小的,所以你的O(n)的++和reverse是很少关注.但我再次觉得有必要说,如果你真的关心性能,那么你根本就不应该使用String- 转而去Text.
编辑提出我的观点,一个快速的标准基准告诉我(对于一个特别长的字符串空格和约200个前后空格)我的修剪需要1.6毫秒,使用反向的修剪需要3.5 Data.Text.strip毫秒,并需要0.0016毫秒.. .
Eri*_*and 35
来自:http://en.wikipedia.org/wiki/Trim_ (programming)#Haskell
import Data.Char (isSpace)
trim :: String -> String
trim = f . f
where f = reverse . dropWhile isSpace
Run Code Online (Sandbox Code Playgroud)
spo*_*joy 24
这个问题被问(大约2012)后,Data.List得到了dropWhileEnd使这是一个容易得多:
trim = dropWhileEnd isSpace . dropWhile isSpace
Run Code Online (Sandbox Code Playgroud)
Sim*_*ael 15
低效但易于理解并粘贴到需要的地方:
strip = lstrip . rstrip
lstrip = dropWhile (`elem` " \t")
rstrip = reverse . lstrip . reverse
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
28203 次 |
| 最近记录: |