模組 Stdlib.StringLabels

module StringLabels: StringLabels

字串

type t = string 

字串的型別。

val make : int -> char -> string

make n c 會產生一個長度為 n 的字串,其中每個索引都包含字元 c

val init : int -> f:(int -> char) -> string

init n ~f 會產生一個長度為 n 的字串,其中索引 i 包含字元 f i (依照索引遞增的順序呼叫)。

val empty : string

空字串。

val length : string -> int

length ss 的長度 (位元組/字元數)。

val get : string -> int -> char

get s is 中索引 i 的字元。這與寫成 s.[i] 相同。

val of_bytes : bytes -> string

回傳一個新的字串,其中包含與給定位元組序列相同的位元組。

val to_bytes : string -> bytes

回傳一個新的位元組序列,其中包含與給定字串相同的位元組。

val blit : src:string -> src_pos:int -> dst:bytes -> dst_pos:int -> len:int -> unit

Bytes.blit_string 相同,但應優先使用 Bytes.blit_string

串接

注意:(^) 二元運算子會串接兩個字串。

val concat : sep:string -> string list -> string

concat ~sep ss 會串接字串列表 ss,並在每個字串之間插入分隔符字串 sep

val cat : string -> string -> string

cat s1 s2 會串接 s1 和 s2 (s1 ^ s2)。

述詞與比較

val equal : t -> t -> bool

equal s0 s1 只有在 s0s1 在字元上相等時,才會是 true

val compare : t -> t -> int

compare s0 s1 會以詞典順序排序 s0s1compare 的行為與字串上的 compare 類似,但可能更有效率。

val starts_with : prefix:string -> string -> bool

starts_with ~prefix s 只有在 sprefix 開頭時,才會是 true

val ends_with : suffix:string -> string -> bool

ends_with ~suffix s 只有在 ssuffix 結尾時,才會是 true

val contains_from : string -> int -> char -> bool

contains_from s start c 只有在 c 出現在 s 中位置 start 之後時,才會是 true

val rcontains_from : string -> int -> char -> bool

rcontains_from s stop c 只有在 c 出現在 s 中位置 stop+1 之前時,才會是 true

val contains : string -> char -> bool

contains s cString.contains_from s 0 c

擷取子字串

val sub : string -> pos:int -> len:int -> string

sub s ~pos ~len 是一個長度為 len 的字串,其中包含從 s 中位置 pos 開始且長度為 len 的子字串。

val split_on_char : sep:char -> string -> string list

split_on_char ~sep ss 中所有由字元 sep 分隔的 (可能為空) 子字串的列表。如果 s 是空的,則結果為單一列表 [""]

此函數的結果由以下不變式指定

  • 此列表不為空。
  • 使用 sep 作為分隔符串接其元素會回傳一個與輸入相等的字串 (concat (make 1 sep)
          (split_on_char sep s) = s
    )。
  • 結果中沒有任何字串包含 sep 字元。

轉換

val map : f:(char -> char) -> string -> string

map f s 是將 f 應用於 s 的所有字元 (依照遞增順序) 後所產生的字串。

val mapi : f:(int -> char -> char) -> string -> string

mapi ~f sStringLabels.map 類似,但字元的索引也會傳遞給 f

val fold_left : f:('acc -> char -> 'acc) -> init:'acc -> string -> 'acc

fold_left f x s 會計算 f (... (f (f x s.[0]) s.[1]) ...) s.[n-1],其中 n 是字串 s 的長度。

val fold_right : f:(char -> 'acc -> 'acc) -> string -> init:'acc -> 'acc

fold_right f s x 會計算 f s.[0] (f s.[1] ( ... (f s.[n-1] x) ...)),其中 n 是字串 s 的長度。

val for_all : f:(char -> bool) -> string -> bool

for_all p s 會檢查 s 中的所有字元是否滿足述詞 p

val exists : f:(char -> bool) -> string -> bool

exists p s 會檢查 s 中是否至少有一個字元滿足述詞 p

val trim : string -> string

trim s 是沒有開頭和結尾空白的 s。空白字元包括:' ''\x0C' (換頁)、'\n''\r''\t'

val escaped : string -> string

escaped ss,其中特殊字元會以跳脫序列表示,遵循 OCaml 的詞法慣例。

所有在 US-ASCII 可列印範圍 [0x20;0x7E] 之外的字元,以及反斜線 (0x2F) 和雙引號 (0x22) 都會被跳脫。

函式 Scanf.unescapedescaped 的左反函數,即對於任何字串 sScanf.unescaped (escaped s) = s (除非 escaped s 失敗)。

val uppercase_ascii : string -> string

uppercase_ascii ss,其中所有小寫字母都會使用 US-ASCII 字元集轉換為大寫。

val lowercase_ascii : string -> string

lowercase_ascii ss,其中所有大寫字母都會使用 US-ASCII 字元集轉換為小寫。

val capitalize_ascii : string -> string

capitalize_ascii ss,其中第一個字元會使用 US-ASCII 字元集設定為大寫。

val uncapitalize_ascii : string -> string

uncapitalize_ascii ss,其中第一個字元會使用 US-ASCII 字元集設定為小寫。

遍歷

val iter : f:(char -> unit) -> string -> unit

iter ~f s 會依序將函式 f 應用於 s 的所有字元。它等同於 f s.[0]; f s.[1]; ...; f s.[length s - 1]; ()

val iteri : f:(int -> char -> unit) -> string -> unit

iteriStringLabels.iter 類似,但函式也會取得對應的字元索引。

搜尋

val index_from : string -> int -> char -> int

index_from s i ccs 中位置 i 之後第一次出現的索引。

val index_from_opt : string -> int -> char -> int option

index_from_opt s i ccs 中位置 i 之後第一次出現的索引 (如果有的話)。

val rindex_from : string -> int -> char -> int

rindex_from s i ccs 中位置 i+1 之前最後一次出現的索引。

val rindex_from_opt : string -> int -> char -> int option

rindex_from_opt s i ccs 中位置 i+1 之前最後一次出現的索引 (如果有的話)。

val index : string -> char -> int

index s cString.index_from s 0 c

val index_opt : string -> char -> int option

index_opt s cString.index_from_opt s 0 c

val rindex : string -> char -> int

rindex s cString.rindex_from s (length s - 1) c

val rindex_opt : string -> char -> int option

rindex_opt s cString.rindex_from_opt s (length s - 1) c

字串與序列

val to_seq : t -> char Seq.t

to_seq s 是一個由字串的字元 (依遞增順序) 組成的序列。在 "unsafe-string" 模式下,迭代期間對字串的修改將反映在序列中。

val to_seqi : t -> (int * char) Seq.t

to_seqi sStringLabels.to_seq 類似,但也包含對應的索引。

val of_seq : char Seq.t -> t

of_seq s 是一個由序列字元組成的字串。

UTF 解碼與驗證

UTF-8

val get_utf_8_uchar : t -> int -> Uchar.utf_decode

get_utf_8_uchar b i 會在 b 中索引 i 的位置解碼一個 UTF-8 字元。

val is_valid_utf_8 : t -> bool

is_valid_utf_8 b 只有在 b 包含有效的 UTF-8 資料時,才會是 true

UTF-16BE

val get_utf_16be_uchar : t -> int -> Uchar.utf_decode

get_utf_16be_uchar b i 會在 b 中索引 i 的位置解碼一個 UTF-16BE 字元。

val is_valid_utf_16be : t -> bool

is_valid_utf_16be b 只有在 b 包含有效的 UTF-16BE 資料時,才會是 true

UTF-16LE

val get_utf_16le_uchar : t -> int -> Uchar.utf_decode

get_utf_16le_uchar b i 會在 b 中索引 i 的位置解碼一個 UTF-16LE 字元。

val is_valid_utf_16le : t -> bool

is_valid_utf_16le b 只有在 b 包含有效的 UTF-16LE 資料時,才會是 true

整數的二進制解碼

本節中的函數會從字串二進制解碼整數。

如果索引 i 中解碼整數所需的字元不可用,則所有下列函式都會引發 Invalid_argument 異常。

小端 (resp. 大端) 編碼表示最不重要的 (resp. 最重要的) 位元組會先儲存。大端也稱為網路位元組順序。原生端編碼是小端或大端,取決於 Sys.big_endian

32 位元和 64 位元整數由 int32int64 型別表示,它們可以被解釋為有符號或無符號數字。

8 位元和 16 位元整數以 int 型別表示,其位元數多於二進位編碼。對於解碼 8 位元或 16 位元整數的函式,這些額外的位元會進行符號擴展(或零擴展),並以 int 值表示。

val get_uint8 : string -> int -> int

get_uint8 b ib 從字元索引 i 開始的無號 8 位元整數。

val get_int8 : string -> int -> int

get_int8 b ib 從字元索引 i 開始的有號 8 位元整數。

val get_uint16_ne : string -> int -> int

get_uint16_ne b ib 從字元索引 i 開始的原生位元組序無號 16 位元整數。

val get_uint16_be : string -> int -> int

get_uint16_be b ib 從字元索引 i 開始的大端序無號 16 位元整數。

val get_uint16_le : string -> int -> int

get_uint16_le b ib 從字元索引 i 開始的小端序無號 16 位元整數。

val get_int16_ne : string -> int -> int

get_int16_ne b ib 從字元索引 i 開始的原生位元組序有號 16 位元整數。

val get_int16_be : string -> int -> int

get_int16_be b ib 從字元索引 i 開始的大端序有號 16 位元整數。

val get_int16_le : string -> int -> int

get_int16_le b ib 從字元索引 i 開始的小端序有號 16 位元整數。

val get_int32_ne : string -> int -> int32

get_int32_ne b ib 從字元索引 i 開始的原生位元組序 32 位元整數。

val hash : t -> int

一個用於字串的未播種雜湊函式,其輸出值與 Hashtbl.hash 相同。此函式允許將此模組作為函子 Hashtbl.Make 的引數傳遞。

val seeded_hash : int -> t -> int

一個用於字串的已播種雜湊函式,其輸出值與 Hashtbl.seeded_hash 相同。此函式允許將此模組作為函子 Hashtbl.MakeSeeded 的引數傳遞。

val get_int32_be : string -> int -> int32

get_int32_be b ib 從字元索引 i 開始的大端序 32 位元整數。

val get_int32_le : string -> int -> int32

get_int32_le b ib 從字元索引 i 開始的小端序 32 位元整數。

val get_int64_ne : string -> int -> int64

get_int64_ne b ib 從字元索引 i 開始的原生位元組序 64 位元整數。

val get_int64_be : string -> int -> int64

get_int64_be b ib 從字元索引 i 開始的大端序 64 位元整數。

val get_int64_le : string -> int -> int64

get_int64_le b ib 從字元索引 i 開始的小端序 64 位元整數。