我需要 Haskell 中的字符串标记器,但Prelude 或其他模块中显然没有定义任何内容。Data.Text 中有 splitOn,但使用起来很痛苦,因为您需要将 String 包装到 Text。
标记器不太难做到,所以我写了一个(它不处理多个相邻的分隔符,但它对我需要的东西很有效)。我觉得这样的东西应该已经在某个地方的模块中了..
这是我的版本
tokenizer :: Char -> String -> [String]
tokenizer delim str = tokHelper delim str []
tokHelper :: Char -> String -> [String] -> [String]
tokHelper d s acc
| null pos = reverse (pre:acc)
| otherwise = tokenizer d (tail pos) (pre:acc)
where (pre, pos) = span (/=d) s
我在互联网上搜索了更多解决方案并找到了一些讨论,比如这篇博文。
最后一条评论(Mahee 于 2011 年 6 月 10 日发表)特别有趣。为什么不制作一个更通用的单词版本来处理这个问题呢?我尝试搜索这样的功能,但没有找到..
有没有更简单的方法,或者“标记”字符串不是一个经常出现的问题?:)