如何解决替换haskell中的反斜杠
您好,我正在尝试通过以下函数中的空字符串替换子字符串 "\r"
来删除它:
clean :: String -> String
clean ('\\':'r':xs) = clean xs
clean (x:xs) = x : clean xs
clean "" = ""
但是当我在测试输入上运行它时:
main = do
print (clean "test line\r\nnew test")
它不起作用,只是输出与输入字符串相同的字符串。现在奇怪的是,如果我用任何其他字符替换反斜杠,例如 ':'
它工作得很好:
clean :: String -> String
clean (':':'r':xs) = clean xs
clean (x:xs) = x : clean xs
clean "" = ""
main = do
print (clean "test line:r\nnew test")
按预期输出 "test line\nnew test"
。我怀疑我没有正确转义双反斜杠。例如代码:
main = do
print '\\'
输出 '\\'
而不是 '\'
,但从我读过的内容来看,应该是逃避它的正确方法。我就是不知道我做错了什么,我错过了什么?
解决方法
\r
是一个字符。当你这样处理它时它会起作用:
clean :: String -> String
clean ('\r':xs) = clean xs
clean (x:xs) = x : clean xs
clean "" = ""
只有当您想将实际的 \
放入字符串文字时,才需要转义反斜杠。
"\r"
是一个带有 one 字符的字符串,反斜杠用来表示一个 carriage return,就像双引号 ("…"
) 不是一部分字符串的内容。
您可以通过以下方式过滤回车:
clean :: String -> String
clean = filter ('\r' /=)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。