如何删除 OCaml 中字符串的所有字符
How to delete all char of a string in OCaml
有没有一种简单的方法可以删除 OCaml 字符串中出现的所有字符?
我想我可以使用这个干净的功能:
let clean =
function
| ' ' | '[' | ']' | '\n' | '>' -> ''
| x -> x
in
但是你不能在 OCaml 中使用 ''
。
所以我想出了这个解决方案:
let delete =
function
| ' ' | '[' | ']' | '\n' | '>' -> true
| _ -> false
in
let char_list, size =
String.fold_left
(fun (acc, count) c ->
if delete c then acc, count
else c::acc, count+1) ([],0) path_string
in
let char_list = ref @@ List.rev char_list in
let aux() =
match !char_list with
| [] -> failwith "unexpected"
| x :: xs -> char_list := xs; x
in
let cleaned_string = String.init size (fun _ -> aux()) in
cleaned_string
但它很大 - python 只是 s.replace('>','')
抑制一个 - 并且只适用于 OCaml 4.13
,我的安装不支持它。
如果要动态构建字符串,应该使用缓冲区
let remove_chars erase s =
let b = Buffer.create 10 in
String.iter (fun c -> if not (erase c) then Buffer.add_char b c);
Buffer.contents b
(构建字符列表效率极低。)
最接近 python 的可能是 Str.global_replace
:
Str.(global_replace (regexp ">") "" s)
或者一次做多个角色,你可以这样做:
Str.(global_replace (regexp "[youChar1yourChar2yourChar3]") "" s)
所以在你的情况下:
Str.(global_replace (regexp "[][> \n]") "" s)
有没有一种简单的方法可以删除 OCaml 字符串中出现的所有字符?
我想我可以使用这个干净的功能:
let clean =
function
| ' ' | '[' | ']' | '\n' | '>' -> ''
| x -> x
in
但是你不能在 OCaml 中使用 ''
。
所以我想出了这个解决方案:
let delete =
function
| ' ' | '[' | ']' | '\n' | '>' -> true
| _ -> false
in
let char_list, size =
String.fold_left
(fun (acc, count) c ->
if delete c then acc, count
else c::acc, count+1) ([],0) path_string
in
let char_list = ref @@ List.rev char_list in
let aux() =
match !char_list with
| [] -> failwith "unexpected"
| x :: xs -> char_list := xs; x
in
let cleaned_string = String.init size (fun _ -> aux()) in
cleaned_string
但它很大 - python 只是 s.replace('>','')
抑制一个 - 并且只适用于 OCaml 4.13
,我的安装不支持它。
如果要动态构建字符串,应该使用缓冲区
let remove_chars erase s =
let b = Buffer.create 10 in
String.iter (fun c -> if not (erase c) then Buffer.add_char b c);
Buffer.contents b
(构建字符列表效率极低。)
最接近 python 的可能是 Str.global_replace
:
Str.(global_replace (regexp ">") "" s)
或者一次做多个角色,你可以这样做:
Str.(global_replace (regexp "[youChar1yourChar2yourChar3]") "" s)
所以在你的情况下:
Str.(global_replace (regexp "[][> \n]") "" s)