我有以下字符串"not really//"
,我想编写一个函数,用两个点"//"
替换每两个斜杠".."
我考虑过使用map,但后来我会遍历字符并且无法知道斜杠是否会被其他人跟踪。有任何线索如何做到这一点? (没有正则表达式)
答案 0 :(得分:5)
我们可以使用StoryDTO
函数的replace :: Text -> Text -> Text -> Text
函数。例如:
MapStruct
然而,我们在Data.Text
上工作。如果这是一个问题,我们也可以使用pack :: String -> Text
和unpack :: Text -> String
在Prelude 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 "" = ""
这不会扩展到长图案,而是用于替换" //"它应该工作正常。