Haskell中如何仅移除字符串中的反斜杠(\)字符并保留双引号
解决Haskell移除反斜杠保留双引号的问题
嘿,你的需求很明确——就是要删掉字符串里的所有反斜杠,同时把双引号完完整整留下来对吧?
你原来的代码问题出在判断条件上:你写的not (x elem "\"" )是在排除双引号,这自然会把输出里的双引号全删掉。要改成只移除反斜杠,只需要把判断的目标字符换成反斜杠就行啦。
这里要注意一个小细节:在Haskell的字符串里,反斜杠是转义字符,所以要表示一个实际的反斜杠,得用两个反斜杠\\来书写。
修改后的函数可以写成这样(两种写法效果完全一致):
-- 写法1:直接判断不等于反斜杠 removeBackslashes xs = [ x | x <- xs, x /= '\\' ] -- 写法2:用elem的方式排除反斜杠 removeBackslashes xs = [ x | x <- xs, not (x `elem` "\\") ]
拿你给的例子测试一下:输入字符串"today \"tomorrow\"."(这里的\"是代码里的转义写法,实际字符串包含双引号和用来转义它的反斜杠),经过这个函数处理后,反斜杠被移除,双引号全部保留,输出就是你想要的"today ""tomorrow"""."。
另外补充个更简洁的写法,用Haskell的filter函数一行搞定:
removeBackslashes = filter (/= '\\')
内容的提问来源于stack exchange,提问作者program.exe




