В 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 "*! "
Когда вы компилируете и запускаете программу, она выдает следующий вывод: