Поделиться через


Строки (F#)

Тип string представляет постоянный текст в виде последовательности символов Юникода. Тип string — это псевдоним для типа String платформы .NET Framework.

Заметки

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

Знак

Escape-последовательность

Backspace

\b

Новая строка

\n

Возврат каретки

\r

Вкладка

\t

Обратная косая черта

\\

Кавычка

\"

Апостроф

\'

Знак Юникода

\uXXXX или \UXXXXXXXX (где X обозначает шестнадцатеричную цифру)

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

В коде допускаются строки, содержащие разрывы строки, при этом разрывы строки интерпретируются буквально как символы новой строки, за исключением случая, когда последним знаком перед разрывом строки является обратная косая черта. Если используется знак обратной косой черты, начальные пробелы в следующей строке игнорируются. Следующий код создает строку str1, имеющую значение "abc\r\n def", и строку str2, имеющую значение "abcdef".

let str1 = "abc
     def"
let str2 = "abc\
     def"

При работе со строками F# сохраняет символы разрыва строк в тех местах, где они находятся, т. е. независимо от того, читается ли строка из файла с переводом строки (LF или \n) или возвратом каретки и переводом строки (CRLF или \r\n) в качестве символа новой строки, эти символы сохраняются.

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

printfn "%c" str1.[1]

В результате получается b.

Используя синтаксис диапазона массива, можно извлекать подстроки, как показано в следующем коде.

printfn "%s" (str1.[0..2])
printfn "%s" (str2.[3..5])

Выходные данные выглядят следующим образом.

abc
def

Строки ASCII могут быть представлены массивами беззнаковых байтов типа byte[]. В строковый литерал добавляется суффикс B, чтобы указать, что литералом является строка ASCII. Строковые литералы ASCII, используемые с байтовыми массивами, поддерживают такие же escape-последовательности, как строки Юникода, за исключением escape-последовательностей Юникода.

// "abc" interpreted as a Unicode string.
let str1 : string = "abc"
// "abc" interpreted as an ASCII byte array. 
let bytearray : byte[] = "abc"B 

Строковые операторы

Существует два способа сцепления строк: с помощью оператора + или с помощью оператора ^. Оператор + поддерживает совместимость с функциями обработки строк платформы .NET Framework.

В следующем примере показано сцепление строк.

let string1 = "Hello, " + "world"

Класс String

Поскольку строковым типом в языке F# фактически является тип String платформы .NET Framework, доступны все члены класса String, в том числе оператор +, используемый для сцепления строк, свойство Length и свойство Chars, которое возвращает строку в виде массива знаков Юникода. Дополнительные сведения о строках см. в разделе String.

Используя свойство Chars класса String, можно получать доступ к отдельным знакам в строке путем указания индекса, как показано в приведенном ниже коде.

let printChar (str : string) (index : int) =
    printfn "First character: %c" (str.Chars(index))

Модуль String

Дополнительные функции обработки строк включены в модуль String в пространстве имен FSharp.Core. Дополнительные сведения см. в разделе Модуль Core.String (F#).

См. также

Ссылки

String

Другие ресурсы

Справочник по языку F#