我需要在OCaml中大写一些文本(即将第一个字母大写)。不幸的是我的文本是UTF-8,标准库只支持ASCII。大写UTF-8文本
我在电池中发现了uppercase
功能,但它似乎只在旧版本中可用。 Camomile(看起来像处理UTF-8的最佳选择)似乎已经死了,文档很少。
我需要在OCaml中大写一些文本(即将第一个字母大写)。不幸的是我的文本是UTF-8,标准库只支持ASCII。大写UTF-8文本
我在电池中发现了uppercase
功能,但它似乎只在旧版本中可用。 Camomile(看起来像处理UTF-8的最佳选择)似乎已经死了,文档很少。
甘菊是这里的解决方案。文档位于sourceforge:http://camomile.sourceforge.net/dochtml/index.html 它非常有趣,可能一见钟情,可能需要一些时间来掌握它,但它的确能完成这项工作。
大写将是这样的:
# open CamomileLibraryDefault;;
# module CM = Camomile.CaseMap.Make(Camomile.UTF8);;
# print_endline (CM.titlecase "привет");;
Привет
谢谢,不幸的是,titlecase并没有大写,它将每个单词都用上了,而不仅仅是第一个单词。 – Thomash
由于ygrek的帮助下,我已经找到了答案,我的问题:
let capitalize (s : string) : string =
if s = "" then "" else
let open CamomileLibraryDefault.Camomile in
let module CM = CaseMap.Make(UTF8) in
let first = UTF8.get s 0 in
let capital = CM.uppercase (UTF8.init 1 (fun _ -> first)) in
UTF8.init (UTF8.length s) (function 0 -> UTF8.get capital 0 | i -> UTF8.get s i)
由于性能的原因,最好在函数之外创建模块CM – ygrek
甘菊是我一直使用的想象。基于刚刚进行的一些快速检查,它似乎是一个相当活跃的项目(在上个月从OPAM下载776次),在过去几个月内进行了修改。但看起来很难访问文档。在下面几个链接之后,我最终看到了Github上文档的HTML源代码。尽管如此,还是有文档和甘菊可能是我个人使用的。 –
要考虑的另一件事是如何大写取决于区域设置。例如http://en.wikipedia.org/wiki/Dotted_and_dotless_I – user102008