从Haskell中的字符串替换子字符串

时间:2018-01-28 22:41:18

标签: string haskell replace functional-programming

我有以下字符串"not really//",我想编写一个函数,用两个点"//"替换每两个斜杠".."

我考虑过使用map,但后来我会遍历字符并且无法知道斜杠是否会被其他人跟踪。有任何线索如何做到这一点? (没有正则表达式)

2 个答案:

答案 0 :(得分:5)

我们可以使用StoryDTO函数的replace :: Text -> Text -> Text -> Text函数。例如:

MapStruct

然而,我们在Data.Text上工作。如果这是一个问题,我们也可以使用pack :: String -> Textunpack :: Text -> StringPrelude Data.Text> replace "//" ".." "not really//" "not really.." Text之间进行转换。所以我们可以用:

定义一个函数
String

但通常用于高效的字符串处理 - 无论是速度还是内存 - 使用Text比使用{-# LANGUAGE OverloadedStrings #-} import Data.Text(pack, unpack, replace) replacedoubleslash :: String -> String replacedoubleslash = unpack . replace "//" ".." . pack 更好。

答案 1 :(得分:5)

显式递归在这里看起来很好:

replace :: String -> String
replace ('/':'/':xs) = '.' : '.' : replace xs
replace (x:xs)       = x : replace xs
replace ""           = ""

这不会扩展到长图案,而是用于替换" //"它应该工作正常。