当前位置:  开发笔记 > 编程语言 > 正文

如何从OCaml中的字符串中删除空格?

如何解决《如何从OCaml中的字符串中删除空格?》经验,为你挑选了3个好方法。

要学习OCaml的基础知识,我正在使用它来解决一个简单的facebook工程难题.基本上,我想做类似以下Python代码的事情:

some_str = some_str.strip()

也就是说,我想从开头和结尾去掉所有的空白.我没有在OCaml Str库中看到任何明显的事情.有没有简单的方法来做到这一点,或者我将不得不写一些代码来做它(我不介意,但不想:)).

请记住,我仅限于OCaml发行版附带的库中的内容.



1> lebowski..:

我知道这个问题已经过时了,但我只是在思考同样的事情并且想出了这个问题(来自顶层):

let strip str = 
  let str = Str.replace_first (Str.regexp "^ +") "" str in
  Str.replace_first (Str.regexp " +$") "" str;;           
val strip : string -> string = 

然后

strip "   Hello, world!   ";;
- : string = "Hello, world!"

更新:

从4.00.0开始,标准库包含String.trim



2> 小智..:

将自己限制在标准库中真的是一个错误,因为标准的图书馆缺少很多东西.例如,如果你使用Core,你可以简单地做:

open Core.Std

let x = String.strip "  foobar   "
let () = assert (x = "foobar")

如果您想查看实现,您当然可以查看Core的来源.ExtLib中有类似的功能.


Core不是标准库的一部分.它是扩展标准的第三方库(如Extlib和Batteries).你可以在这里下载:http://janestcapital.com/?q = node/13

3> TBH..:

怎么样

let trim str =
  if str = "" then "" else
  let search_pos init p next =
    let rec search i =
      if p i then raise(Failure "empty") else
      match str.[i] with
      | ' ' | '\n' | '\r' | '\t' -> search (next i)
      | _ -> i
    in
    search init
  in
  let len = String.length str in
  try
    let left = search_pos 0 (fun i -> i >= len) (succ)
    and right = search_pos (len - 1) (fun i -> i < 0) (pred)
    in
    String.sub str left (right - left + 1)
  with
  | Failure "empty" -> ""

(通过Code Codex)


这个问题是google的首页.所以为了快速查找,我在这里给出答案.它是String.strip
推荐阅读
雯颜哥_135
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有