Haskell中如何处理字符串内双引号、换行符并拼接字符串列表
Haskell allStrings 函数实现
核心逻辑
你需要先对每个字符串中的特殊字符做转义处理,再用空格拼接所有处理后的字符串即可实现需求:
- 遇到双引号
"时替换为连续两个双引号"" - 换行符可根据你的实际需要选择保留、替换为空格或转义为可见的
\n,以下实现默认保留原始换行符
完整代码
import Data.List (intercalate) -- 单个特殊字符转换逻辑 escapeChar :: Char -> String escapeChar '"' = "\"\"" -- 双引号替换为两个连续双引号 escapeChar '\n' = "\n" -- 保留换行符,如需替换为空格可改为 " ",如需转义为可见\n可改为 "\\n" escapeChar c = [c] -- 其余字符原样返回 -- 处理单个字符串的所有字符 escapeString :: String -> String escapeString = concatMap escapeChar -- 主函数:先处理每个元素,再用空格拼接 allStrings :: [String] -> String allStrings = intercalate " " . map escapeString
如果你不想引入Data.List依赖,也可以手动实现拼接逻辑,替换主函数为:
allStrings :: [String] -> String allStrings [] = "" allStrings (first:rest) = foldl (\acc s -> acc ++ " " ++ escapeString s) (escapeString first) rest
效果测试
输入测试用例:allStrings ["Sun\"shine\"", "Rain"]
输出结果:"Sun\"\"shine\"\" Rain",和你预期的转换效果完全一致。
内容的提问来源于stack exchange,提问作者program.exe
相关产品推荐
相关产品推荐

