В F # строковый тип представляет неизменный текст как последовательность символов Юникода.
Строковые литералы
Строковые литералы разделяются символом кавычки («).
Для специальных целей используются некоторые специальные символы, такие как перевод строки, табуляция и т. Д. Они кодируются с использованием символа обратной косой черты (\). Символ обратной косой черты и связанный символ составляют escape-последовательность. В следующей таблице показана escape-последовательность, поддерживаемая F #.
| символ | Последовательность побега | 
|---|---|
| возврат на одну позицию | \ б | 
| Новая линия | \ п | 
| Возврат каретки | \р | 
| табуляция | \ т | 
| бэкслэш | \\ | 
| Кавычка | \» | 
| Апостроф | \» | 
| Unicode персонаж | \ uXXXX или \ UXXXXXXXX (где X обозначает шестнадцатеричное число) | 
Способы игнорирования последовательности побега
Следующие два способа заставляют компилятор игнорировать escape-последовательность —
- Используя символ @.
 - Заключение строки в тройные кавычки.
 
Когда строковому литералу предшествует символ @, он называется дословной строкой. Таким образом, все escape-последовательности в строке игнорируются, за исключением того, что два символа кавычки интерпретируются как один символ кавычки.
Если строка заключена в тройные кавычки, то игнорируются также все escape-последовательности, включая символы двойной кавычки.
пример
В следующем примере демонстрируется этот метод, показывающий, как работать с XML или другими структурами, включающими встроенные кавычки.
// 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 создает новую строку, символы которой являются результатом применения указанной функции к каждому из символов входной строки и конкатенации полученных строк.
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 объединяет данную последовательность строк с разделителем и возвращает новую строку.
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 возвращает строку путем конкатенации указанного количества экземпляров строки.
printfn "%s" <| String.replicate 10 "*! "
Когда вы компилируете и запускаете программу, она выдает следующий вывод: