我想编写一个Haskell函数,该函数需要一个字符串,并用特殊代码%20替换所有空格字符。例如:
sanitize "http://cs.edu/my homepage/I love spaces.html"
-- "http://cs.edu/my%20homepage/I%20love%20spaces.html"
我正在考虑使用concat函数,因此我可以将列表列表串联为一个普通列表。
最佳答案
changer :: [Char] -> [Char] -> [Char]
changer [] res = res
changer (x:xs) res = changer xs (res ++ (if x == ' ' then "%20" else [x]))
sanitize :: [Char] -> [Char]
sanitize xs = changer xs ""
main = print $ sanitize "http://cs.edu/my homepage/I love spaces.html"
-- "http://cs.edu/my%20homepage/I%20love%20spaces.html"
sanitize
函数的目的是仅调用changer
,它可以完成实际工作。现在,changer
递归调用自身,直到当前字符串用尽。changer xs (res ++ (if x == ' ' then "%20" else [x]))
它采用第一个字符
x
并检查它是否等于" "
,如果相等则给出%20
,否则将实际的字符本身作为字符串,然后将其与累积的字符串连接起来。注意:这可能不是最佳解决方案。
关于string - 如何用 “%20”替换字符串中的空格字符?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26457811/