如何在OCaml中删除字符串内指定字符的所有出现
OCaml 低版本兼容的字符串指定字符删除方案
你遇到的核心问题是OCaml强类型要求分支返回值类型统一,''不是合法的char类型值,自然没法直接用类似替换为空字符的写法实现删除。
你原来基于String.fold_left的实现思路是对的,但是不需要额外用ref和String.init拼接,用Buffer处理字符串拼接是OCaml的标准实践,性能和代码简洁度都更高。
标准库无依赖兼容方案(兼容OCaml 4.00+所有版本)
代码简洁高效,不需要依赖第三方库:
(* 批量删除多个指定字符 *) let remove_chars forbidden_chars s = let buf = Buffer.create (String.length s) in String.iter (fun c -> if not (List.mem c forbidden_chars) then Buffer.add_char buf c ) s; Buffer.contents buf (* 单字符删除,完全对应Python的s.replace(target, "")效果 *) let remove_char target_char s = let buf = Buffer.create (String.length s) in String.iter (fun c -> if c <> target_char then Buffer.add_char buf c ) s; Buffer.contents buf
使用示例:
(* 删除所有空格、[、]、换行、>字符 *) let cleaned_str = remove_chars [' '; '['; ']'; '\n'; '>'] path_string (* 仅删除所有>字符 *) let cleaned_str = remove_char '>' path_string
如果你使用Base/Core等替代标准库,还可以直接用封装好的filter方法,写法更简洁:
(* Base库下的写法 *) let cleaned_str = String.filter ~f:(fun c -> c <> '>') path_string
内容的提问来源于stack exchange,提问作者Butanium
相关产品推荐
相关产品推荐

