module StringLabels: StringLabels
typet =
string
字串的型別。
val make : int -> char -> string
make n c
會產生一個長度為 n
的字串,其中每個索引都包含字元 c
。
n < 0
或 n >
Sys.max_string_length
,則會引發 Invalid_argument
異常。val init : int -> f:(int -> char) -> string
init n ~f
會產生一個長度為 n
的字串,其中索引 i
包含字元 f i
(依照索引遞增的順序呼叫)。
n < 0
或 n >
Sys.max_string_length
,則會引發 Invalid_argument
異常。val empty : string
空字串。
val length : string -> int
length s
是 s
的長度 (位元組/字元數)。
val get : string -> int -> char
get s i
是 s
中索引 i
的字元。這與寫成 s.[i]
相同。
i
不是 s
的有效索引,則會引發 Invalid_argument
異常。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
。
Sys.max_string_length
個位元組,則會引發 Invalid_argument
異常。val cat : string -> string -> string
cat s1 s2
會串接 s1 和 s2 (s1 ^ s2
)。
Sys.max_string_length
個位元組,則會引發 Invalid_argument
異常。val equal : t -> t -> bool
equal s0 s1
只有在 s0
和 s1
在字元上相等時,才會是 true
。
val compare : t -> t -> int
compare s0 s1
會以詞典順序排序 s0
和 s1
。compare
的行為與字串上的 compare
類似,但可能更有效率。
val starts_with : prefix:string -> string -> bool
starts_with
~prefix s
只有在 s
以 prefix
開頭時,才會是 true
。
val ends_with : suffix:string -> string -> bool
ends_with
~suffix s
只有在 s
以 suffix
結尾時,才會是 true
。
val contains_from : string -> int -> char -> bool
contains_from s start c
只有在 c
出現在 s
中位置 start
之後時,才會是 true
。
start
不是 s
中的有效位置,則會引發 Invalid_argument
異常。val rcontains_from : string -> int -> char -> bool
rcontains_from s stop c
只有在 c
出現在 s
中位置 stop+1
之前時,才會是 true
。
stop < 0
或 stop+1
不是 s
中的有效位置,則會引發 Invalid_argument
異常。val contains : string -> char -> bool
contains s c
為 String.contains_from
s 0 c
。
val sub : string -> pos:int -> len:int -> string
sub s ~pos ~len
是一個長度為 len
的字串,其中包含從 s
中位置 pos
開始且長度為 len
的子字串。
pos
和 len
未指定 s
的有效子字串,則會引發 Invalid_argument
異常。val split_on_char : sep:char -> string -> string list
split_on_char ~sep s
是 s
中所有由字元 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 s
與 StringLabels.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 s
是 s
,其中特殊字元會以跳脫序列表示,遵循 OCaml 的詞法慣例。
所有在 US-ASCII 可列印範圍 [0x20;0x7E] 之外的字元,以及反斜線 (0x2F) 和雙引號 (0x22) 都會被跳脫。
函式 Scanf.unescaped
是 escaped
的左反函數,即對於任何字串 s
,Scanf.unescaped (escaped s) = s
(除非 escaped s
失敗)。
Sys.max_string_length
個位元組,則會引發 Invalid_argument
異常。val uppercase_ascii : string -> string
uppercase_ascii s
是 s
,其中所有小寫字母都會使用 US-ASCII 字元集轉換為大寫。
val lowercase_ascii : string -> string
lowercase_ascii s
是 s
,其中所有大寫字母都會使用 US-ASCII 字元集轉換為小寫。
val capitalize_ascii : string -> string
capitalize_ascii s
是 s
,其中第一個字元會使用 US-ASCII 字元集設定為大寫。
val uncapitalize_ascii : string -> string
uncapitalize_ascii s
是 s
,其中第一個字元會使用 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
iteri
與 StringLabels.iter
類似,但函式也會取得對應的字元索引。
val index_from : string -> int -> char -> int
index_from s i c
是 c
在 s
中位置 i
之後第一次出現的索引。
c
沒有出現在 s
中位置 i
之後,則會引發 Not_found
異常。i
不是 s
中的有效位置,則會引發 Invalid_argument
異常。val index_from_opt : string -> int -> char -> int option
index_from_opt s i c
是 c
在 s
中位置 i
之後第一次出現的索引 (如果有的話)。
i
不是 s
中的有效位置,則會引發 Invalid_argument
異常。val rindex_from : string -> int -> char -> int
rindex_from s i c
是 c
在 s
中位置 i+1
之前最後一次出現的索引。
c
沒有出現在 s
中位置 i+1
之前,則會引發 Not_found
異常。i+1
不是 s
中的有效位置,則會引發 Invalid_argument
異常。val rindex_from_opt : string -> int -> char -> int option
rindex_from_opt s i c
是 c
在 s
中位置 i+1
之前最後一次出現的索引 (如果有的話)。
i+1
不是 s
中的有效位置,則會引發 Invalid_argument
異常。val index : string -> char -> int
index s c
為 String.index_from
s 0 c
。
val index_opt : string -> char -> int option
index_opt s c
為 String.index_from_opt
s 0 c
。
val rindex : string -> char -> int
rindex s c
為 String.rindex_from
s (length s - 1) c
。
val rindex_opt : string -> char -> int option
rindex_opt s c
為 String.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 s
與 StringLabels.to_seq
類似,但也包含對應的索引。
val of_seq : char Seq.t -> t
of_seq s
是一個由序列字元組成的字串。
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
。
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
。
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 位元整數由 int32
和 int64
型別表示,它們可以被解釋為有符號或無符號數字。
8 位元和 16 位元整數以 int
型別表示,其位元數多於二進位編碼。對於解碼 8 位元或 16 位元整數的函式,這些額外的位元會進行符號擴展(或零擴展),並以 int
值表示。
val get_uint8 : string -> int -> int
get_uint8 b i
是 b
從字元索引 i
開始的無號 8 位元整數。
val get_int8 : string -> int -> int
get_int8 b i
是 b
從字元索引 i
開始的有號 8 位元整數。
val get_uint16_ne : string -> int -> int
get_uint16_ne b i
是 b
從字元索引 i
開始的原生位元組序無號 16 位元整數。
val get_uint16_be : string -> int -> int
get_uint16_be b i
是 b
從字元索引 i
開始的大端序無號 16 位元整數。
val get_uint16_le : string -> int -> int
get_uint16_le b i
是 b
從字元索引 i
開始的小端序無號 16 位元整數。
val get_int16_ne : string -> int -> int
get_int16_ne b i
是 b
從字元索引 i
開始的原生位元組序有號 16 位元整數。
val get_int16_be : string -> int -> int
get_int16_be b i
是 b
從字元索引 i
開始的大端序有號 16 位元整數。
val get_int16_le : string -> int -> int
get_int16_le b i
是 b
從字元索引 i
開始的小端序有號 16 位元整數。
val get_int32_ne : string -> int -> int32
get_int32_ne b i
是 b
從字元索引 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 i
是 b
從字元索引 i
開始的大端序 32 位元整數。
val get_int32_le : string -> int -> int32
get_int32_le b i
是 b
從字元索引 i
開始的小端序 32 位元整數。
val get_int64_ne : string -> int -> int64
get_int64_ne b i
是 b
從字元索引 i
開始的原生位元組序 64 位元整數。
val get_int64_be : string -> int -> int64
get_int64_be b i
是 b
從字元索引 i
開始的大端序 64 位元整數。
val get_int64_le : string -> int -> int64
get_int64_le b i
是 b
從字元索引 i
開始的小端序 64 位元整數。