Учебники

F # — Струны

В F # строковый тип представляет неизменный текст как последовательность символов Юникода.

Строковые литералы

Строковые литералы разделяются символом кавычки («).

Для специальных целей используются некоторые специальные символы, такие как перевод строки, табуляция и т. Д. Они кодируются с использованием символа обратной косой черты (\). Символ обратной косой черты и связанный символ составляют escape-последовательность. В следующей таблице показана escape-последовательность, поддерживаемая F #.

символ Последовательность побега
возврат на одну позицию \ б
Новая линия \ п
Возврат каретки
табуляция \ т
бэкслэш \\
Кавычка
Апостроф
Unicode персонаж \ uXXXX или \ UXXXXXXXX (где X обозначает шестнадцатеричное число)

Способы игнорирования последовательности побега

Следующие два способа заставляют компилятор игнорировать escape-последовательность —

  • Используя символ @.
  • Заключение строки в тройные кавычки.

Когда строковому литералу предшествует символ @, он называется дословной строкой. Таким образом, все escape-последовательности в строке игнорируются, за исключением того, что два символа кавычки интерпретируются как один символ кавычки.

Если строка заключена в тройные кавычки, то игнорируются также все escape-последовательности, включая символы двойной кавычки.

пример

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

Live Demo

// Using a verbatim string
let xmldata = @"<book author = ""Lewis, C.S"" title = ""Narnia"">"
printfn "%s" xmldata

Когда вы компилируете и запускаете программу, она выдает следующий вывод:

<book author = "Lewis, C.S" title = "Narnia">

Основные операторы на строках

В следующей таблице приведены основные операции со строками:

Значение Описание
собирать: (символ → строка) → строка → строка Создает новую строку, символы которой являются результатом применения указанной функции к каждому из символов входной строки и конкатенации полученных строк.
concat: string → seq <string> → string Возвращает новую строку, созданную путем объединения указанных строк с разделителем.
существует: (char → bool) → string → bool Проверяет, удовлетворяет ли какой-либо символ строки указанному предикату.
forall: (char → bool) → строка → bool Проверяет, все ли символы в строке удовлетворяют данному предикату.
init: int → (int → string) → string Создает новую строку, символы которой являются результатом применения указанной функции к каждому индексу и конкатенации полученных строк.
iter: (символ → единица) → строка → единица Применяет указанную функцию к каждому символу в строке.
iteri: (int → char → unit) → string → unit Применяет указанную функцию к индексу каждого символа в строке и самому символу.
длина: строка → int Возвращает длину строки.
карта: (символ → символ) → строка → строка Создает новую строку, символы которой являются результатом применения указанной функции к каждому из символов входной строки.
mapi: (int → char → char) → строка → строка Создает новую строку, символы которой являются результатом применения указанной функции к каждому символу и индексу входной строки.
копия: int → строка → строка Возвращает строку путем конкатенации указанного количества экземпляров строки.

Следующие примеры демонстрируют использование некоторых из вышеуказанных функций —

Пример 1

Функция String.collect создает новую строку, символы которой являются результатом применения указанной функции к каждому из символов входной строки и конкатенации полученных строк.

Live Demo

let collectTesting inputS =
   String.collect (fun c -> sprintf "%c " c) inputS
printfn "%s" (collectTesting "Happy New Year!")

Когда вы компилируете и запускаете программу, она выдает следующий вывод:

H a p p y N e w Y e a r !

Пример 2

Функция String.concat объединяет данную последовательность строк с разделителем и возвращает новую строку.

Live Demo

let strings = [ "Tutorials Point"; "Coding Ground"; "Absolute Classes" ]
let ourProducts = String.concat "\n" strings
printfn "%s" ourProducts

Когда вы компилируете и запускаете программу, она выдает следующий вывод:

Tutorials Point
Coding Ground
Absolute Classes

Пример 3

Метод String.replicate возвращает строку путем конкатенации указанного количества экземпляров строки.

Live Demo

printfn "%s" <| String.replicate 10 "*! "

Когда вы компилируете и запускаете программу, она выдает следующий вывод: