微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

替换haskell中的反斜杠

如何解决替换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 举报,一经查实,本站将立刻删除。