Spec-Zone.ru › OCaml 5.0

Модуль StringLabels

module StringLabels: sig .. end

Строки.

Строка s длиной n — это индексируемая и неизменяемая последовательность n байтов. По историческим причинам эти байты называются символами.

Семантика функций строк определяется в терминах индексов и позиций. Они изображены и описаны следующим образом.

positions  0   1   2   3   4    n-1    n
           +---+---+---+---+     +-----+
  indices  | 0 | 1 | 2 | 3 | ... | n-1 |
           +---+---+---+---+     +-----+
  • Индекс i s — целое число в диапазоне [0;n-1]. Он представляет i-й байт (символ) s, к которому можно обратиться с помощью оператора индексирования строк с постоянной сложностью s.[i].
  • Позиция i s — целое число в диапазоне [0;n]. Она представляет либо точку в начале строки, либо точку между двумя индексами, либо точку в конце строки. Индекс i-го байта находится между позициями i и i+1.

Два целых числа start и len определяют допустимый подстроку s , если len >= 0 и start, start+len являются позициями s.

Текст Unicode. Строки, являясь произвольными последовательностями байтов, могут содержать любой вид кодировки текста. Однако рекомендуемой кодировкой для хранения текста Unicode в OCaml-строках является UTF-8. Это кодировка, используемая в строковых литералах с экранированными символами Unicode. Например, строка "\u{1F42B}" является кодировкой UTF-8 для символа Unicode U+1F42B.

Прежняя изменяемость. До OCaml 4.02 строки могли изменяться на месте, как Bytes.t — изменяемые последовательности байтов. В OCaml 4 были различные флаги компилятора и параметры конфигурации для поддержки переходного периода от изменяемых к неизменяемым строкам. Эти параметры больше не доступны, и строки всегда неизменяемы.

Метка версии этого модуля может быть использована, как описано в модуле StdLabels.

Строки

type t = string 

Тип для строк.

val make : int -> char -> string

make n c — это строка длиной n с каждым индексом, содержащим символ c.

  • Возбуждает Invalid_argument если n < 0 или n > Sys.max_string_length.
val init : int -> f:(int -> char) -> string

init n ~f — это строка длиной n с индексом i, содержащим символ f i (упорядоченные по возрастанию индекса).

  • С тех пор 4.02.0
  • Возбуждает Invalid_argument если n < 0 или n > Sys.max_string_length.
val empty : string

Пустая строка.

  • С тех пор 4.13.0
val of_bytes : bytes -> string

Возвращает новую строку, содержащую те же байты, что и заданная последовательность байтов.

  • С тех пор 4.13.0
val to_bytes : string -> bytes

Возвращает новую последовательность байтов, содержащую те же байты, что и заданная строка.

  • С тех пор 4.13.0
val length : string -> int

length s — это длина (количество байтов/символов) s.

val get : string -> int -> char

get s i — это символ с индексом i в s. Это то же самое, что и s.[i].

  • Возбуждает Invalid_argument если i не является индексом s.

Конкатенация

Примечание. Бинарный оператор (^) конкатенирует две строки.

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

concat ~sep ss конкатенирует список строк ss, вставляя разделительную строку sep между каждой.

  • Возбуждает Invalid_argument если результат длиннее, чем Sys.max_string_length байтов.
val cat : string -> string -> string

cat s1 s2 конкатенирует s1 и s2 (s1 ^ s2).

  • С тех пор 4.13.0
  • Возбуждает Invalid_argument если результат длиннее, чем Sys.max_string_length байтов.

Предикаты и сравнения

val equal : t -> t -> bool

equal s0 s1 является true тогда и только тогда, когда s0 и s1 равны посимвольно.

  • С тех пор 4.05.0
val compare : t -> t -> int

compare s0 s1 сортирует s0 и s1 в лексикографическом порядке. compare ведет себя как compare для строк, но может быть эффективнее.

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

starts_with ~prefix s является true тогда и только тогда, когда s начинается с prefix.

  • С тех пор 4.13.0
val ends_with : suffix:string -> string -> bool

ends_with ~suffix s является true тогда и только тогда, когда s заканчивается на suffix.

  • С тех пор 4.13.0
val contains_from : string -> int -> char -> bool

contains_from s start c является true тогда и только тогда, когда c появляется в s после позиции start.

  • Возбуждает Invalid_argument если start не является допустимой позицией в s.
val rcontains_from : string -> int -> char -> bool

rcontains_from s stop c является true тогда и только тогда, когда c появляется в s перед позицией stop+1.

  • Возбуждает Invalid_argument если stop < 0 или stop+1 не является допустимой позицией в s.
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.

  • Возбуждает Invalid_argument если pos и len не обозначают допустимую подстроку s.
val split_on_char : sep:char -> string -> string list

split_on_char ~sep s — это список всех (возможно пустых) подстрок s , ограниченных символом sep.

Результат функции задаётся следующими инвариантами:

  • Список не пуст.
  • Конкатенация его элементов с использованием sep в качестве разделителя возвращает строку, равную входу (concat (make 1 sep)
          (split_on_char sep s) = s
    ).
  • Ни одна строка в результате не содержит символ sep.
  • С тех пор 4.05.0

Преобразование

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

map f s — это строка, полученная путём применения f ко всем символам s в порядке возрастания индексов.

  • С тех пор 4.00.0
val mapi : f:(int -> char -> char) -> string -> string

mapi ~f s подобно StringLabels.map, но индекс символа также передаётся f.

  • С тех пор 4.02.0
val fold_left : f:('a -> char -> 'a) -> init:'a -> string -> 'a

fold_left f x s вычисляет f (... (f (f x s.[0]) s.[1]) ...) s.[n-1], где n — длина строки s.

  • С тех пор 4.13.0
val fold_right : f:(char -> 'a -> 'a) -> string -> init:'a -> 'a

fold_right f s x вычисляет f s.[0] (f s.[1] ( ... (f s.[n-1] x) ...)), где n — длина строки s.

  • С тех пор 4.13.0
val for_all : f:(char -> bool) -> string -> bool

for_all p s проверяет, удовлетворяют ли все символы в s предикату p.

  • С тех пор 4.13.0
val exists : f:(char -> bool) -> string -> bool

exists p s проверяет, удовлетворяет ли хотя бы один символ s предикату p.

  • С тех пор 4.13.0
val trim : string -> string

trim s — это s без начальных и конечных пробелов. Пробельные символы: ' ', '\x0C' (вставка страницы), '\n', '\r', и '\t'.

  • С тех пор 4.00.0
val escaped : string -> string

escaped s является s с использованием специальных символов, представленных последовательностями экранирования, в соответствии с лексическими соглашениями OCaml.

Все символы за пределами напечатанного диапазона US-ASCII [0x20;0x7E], а также обратный слэш (0x2F) и двойная кавычка (0x22) экранируются.

Функция Scanf.unescaped является левым обратным отображением escaped, т.е. Scanf.unescaped (escaped s) = s для любой строки s (если escaped s не завершается неудачно).

  • Возбуждает Invalid_argument если результат длиннее, чем Sys.max_string_length байтов.
val uppercase_ascii : string -> string

uppercase_ascii s преобразует все строчные буквы в прописные, используя набор символов US-ASCII.

  • С 4.05.0
val lowercase_ascii : string -> string

lowercase_ascii s преобразует все прописные буквы в строчные, используя набор символов US-ASCII.

  • С 4.05.0
val capitalize_ascii : string -> string

capitalize_ascii s преобразует первый символ в прописной, используя набор символов US-ASCII.

  • С 4.05.0
val uncapitalize_ascii : string -> string

uncapitalize_ascii s преобразует первый символ в строчный, используя набор символов US-ASCII.

  • С 4.05.0

Проход по строке

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, но функция также получает соответствующий индекс символа.

  • С 4.00.0

Поиск

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

index_from s i c — индекс первого вхождения c в s после позиции i.

  • Возбуждает
    • Not_found если c не встречается в s после позиции i.
    • Invalid_argument если i — не допустимая позиция в s.
val index_from_opt : string -> int -> char -> int option

index_from_opt s i c — индекс первого вхождения c в s после позиции i (если таковое имеется).

  • С 4.05
  • Возбуждает Invalid_argument если i — не допустимая позиция в s.
val rindex_from : string -> int -> char -> int

rindex_from s i c — индекс последнего вхождения c в s перед позицией i+1.

  • Возбуждает
    • Not_found если c не встречается в s перед позицией i+1.
    • Invalid_argument если i+1 — не допустимая позиция в s.
val rindex_from_opt : string -> int -> char -> int option

rindex_from_opt s i c — индекс последнего вхождения c в s перед позицией i+1 (если таковое имеется).

  • С 4.05
  • Возбуждает Invalid_argument если i+1 — не допустимая позиция в s.
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.

  • С 4.05
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.

  • С 4.05

Строки и последовательности

val to_seq : t -> char Seq.t

to_seq s — последовательность символов строки в порядке возрастания. В режиме "unsafe-string", изменения строки во время итерации будут отражены в последовательности.

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

to_seqi s подобно StringLabels.to_seq, но также возвращает кортеж с соответствующим индексом.

  • С 4.07
val of_seq : char Seq.t -> t

of_seq s — строка, образованная из символов последовательности.

  • С 4.07

Декодирование и валидация UTF

UTF-8

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

get_utf_8_uchar b i декодирует символ UTF-8 по индексу i в b.

val is_valid_utf_8 : t -> bool

is_valid_utf_8 b равно true, если и только если b содержит валидные данные UTF-8.

UTF-16BE

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

get_utf_16be_uchar b i декодирует символ UTF-16BE по индексу i в b.

val is_valid_utf_16be : t -> bool

is_valid_utf_16be b равно true, если и только если b содержит валидные данные UTF-16BE.

UTF-16LE

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

get_utf_16le_uchar b i декодирует символ UTF-16LE по индексу i в b.

val is_valid_utf_16le : t -> bool

is_valid_utf_16le b равно true, если и только если b содержит валидные данные UTF-16LE.

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

blit ~src ~src_pos ~dst ~dst_pos ~len копирует len байтов из строки src, начиная с индекса src_pos, в байтовую последовательность dst, начиная с символа dst_pos.

  • Возбуждает Invalid_argument если src_pos и len не обозначают допустимый диапазон в src, или если dst_pos и len не обозначают допустимый диапазон в dst.

Бинарное декодирование целых чисел

Функции в этом разделе декодируют целые числа из строк в двоичном формате.

Все следующие функции возбуждают Invalid_argument если необходимые символы по индексу i для декодирования целого числа недоступны.

Маленький (соответственно, большой) порядок байтов означает, что наименее (соответственно, наиболее) значимые байты хранятся первыми. Большой порядок байтов также известен как сетевой порядок байтов. Порядок байтов по умолчанию — это либо порядок байтов little-endian, либо big-endian, в зависимости от Sys.big_endian.

32-битные и 64-битные целые числа представлены типами int32 и int64, которые могут быть интерпретированы как знакомые или беззнаковые числа.

8-битные и 16-битные целые числа представлены типом int, имеющим больше битов, чем двоичное кодирование. Эти дополнительные биты расширяются со знаком (или нулём) для функций, декодирующих 8-битные или 16-битные целые числа, представляемых значениями int.

val get_uint8 : string -> int -> int

get_uint8 b i — беззнаковое 8-битное целое число b, начинающееся с символа i.

  • С 4.13.0
val get_int8 : string -> int -> int

get_int8 b i — знаковое 8-битное целое число b, начинающееся с символа i.

  • С 4.13.0
val get_uint16_ne : string -> int -> int

get_uint16_ne b i — беззнаковое 16-битное целое число b в порядке байтов по умолчанию, начинающееся с символа i.

  • С 4.13.0
val get_uint16_be : string -> int -> int

get_uint16_be b i — беззнаковое 16-битное целое число b в порядке байтов big-endian, начинающееся с символа i.

  • С 4.13.0
val get_uint16_le : string -> int -> int

get_uint16_le b i — беззнаковое 16-битное целое число b в порядке байтов little-endian, начинающееся с символа i.

  • С 4.13.0
val get_int16_ne : string -> int -> int

get_int16_ne b i — знаковое 16-битное целое число b в порядке байтов по умолчанию, начинающееся с символа i.

  • С 4.13.0
val get_int16_be : string -> int -> int

get_int16_be b i — знаковое 16-битное целое число в формате big-endian структуры b, начиная с символа с индексом i.

  • Since 4.13.0
val get_int16_le : string -> int -> int

get_int16_le b i — знаковое 16-битное целое число в формате little-endian структуры b, начиная с символа с индексом i.

  • Since 4.13.0
val get_int32_ne : string -> int -> int32

get_int32_ne b i — 32-битное целое число в формате native-endian структуры b, начиная с символа с индексом i.

  • Since 4.13.0
val hash : t -> int

Функция хеширования строк без начального значения, выдающая тот же результат, что и Hashtbl.hash. Эта функция позволяет использовать этот модуль в качестве аргумента для функтора Hashtbl.Make.

  • Since 5.0.0
val seeded_hash : int -> t -> int

Функция хеширования строк с начальным значением, выдающая тот же результат, что и Hashtbl.seeded_hash. Эта функция позволяет использовать этот модуль в качестве аргумента для функтора Hashtbl.MakeSeeded.

  • Since 5.0.0
val get_int32_be : string -> int -> int32

get_int32_be b i — 32-битное целое число в формате big-endian структуры b, начиная с символа с индексом i.

  • Since 4.13.0
val get_int32_le : string -> int -> int32

get_int32_le b i — 32-битное целое число в формате little-endian структуры b, начиная с символа с индексом i.

  • Since 4.13.0
val get_int64_ne : string -> int -> int64

get_int64_ne b i — 64-битное целое число в формате native-endian структуры b, начиная с символа с индексом i.

  • Since 4.13.0
val get_int64_be : string -> int -> int64

get_int64_be b i — 64-битное целое число в формате big-endian структуры b, начиная с символа с индексом i.

  • Since 4.13.0
val get_int64_le : string -> int -> int64

get_int64_le b i — 64-битное целое число в формате little-endian структуры b, начиная с символа с индексом i.

  • Since 4.13.0

© 1995-2022 INRIA.
https://v2.ocaml.org/releases/5.0/htmlman/libref/StringLabels.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API