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


Строки

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

Замечания

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

Символ escape-последовательность
Предупреждение \a
Backspace \b
Подача страницы \f
Новая строка \n
Возврат каретки \r
Вкладка \t
Вертикальная табуляция \v
Обратная косая черта \\
Знак кавычек \"
Апостроф \'
символьный формат Юникода \DDD (где D указывает десятичную цифру; диапазон от 000 до 255; например, \231 = "ç")
символьный формат Юникода \xHH (где H указывает шестнадцатеричную цифру; диапазон 00 – FF; например, \xE7 = "ç")
символьный формат Юникода \uHHHH (UTF-16) (где H указывает шестнадцатеричную цифру; диапазон 0000 – FFFF; например, \u00E7 = "ç")
символьный формат Юникода \U00HHHHHH (UTF-32) (где H указывает шестнадцатеричную цифру; диапазон от 000000 до 10FFFF; например, \U0001F47D = "👽")

Внимание

\DDD Escape-последовательность — десятичная нотация, а не восьмеричная нотация, как и в большинстве других языков. Таким образом, цифры 8 и 9 допустимы, а последовательность \032 представляет пробел (U+0020), в то время как та же точка кода в восьмеричной нотации будет \040.

Примечание.

Ограничен диапазоном от 0 до 255 (0xFF), \DDD последовательности и \x escape-последовательности фактически являются набором символов ISO-8859-1 , так как это соответствует первым 256 точкам кода Юникода.

Подробные строки

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

Три кавычки

Кроме того, строка может быть заключена в три кавычки. В этом случае все escape-последовательности игнорируются, включая двойные кавычки. Чтобы указать строку, содержащую внедренную в кавычки строку, можно использовать строку подробной или тройной кавычки. При использовании подробной строки необходимо указать два символа кавычки, чтобы указать один символ кавычки. Если используется строка с тройным кавычками, вы можете использовать одинарные символы кавычки, не анализируя их как конец строки. Этот метод может быть полезным при работе с XML или другими структурами, включающими внедренные кавычки.

// Using a verbatim string
let xmlFragment1 = @"<book author=""Milton, John"" title=""Paradise Lost"">"

// Using a triple-quoted string
let xmlFragment2 = """<book author="Milton, John" title="Paradise Lost">"""

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

let str1 =
    "abc
def"

let str2 =
    "abc\
def"

Индексирование строк и срезы

Доступ к отдельным символам в строке можно получить с помощью синтаксиса, подобного массиву. В следующих примерах используются [] для индексирования строк. Этот синтаксис был представлен в F# 6.0. Можно также использовать .[] для индексирования строк во всех версиях. Новый синтаксис предпочтителен.

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# на самом деле является типом платформа .NET FrameworkSystem.String, все System.String элементы доступны. System.String+ включает оператор, который используется для объединения строк, Length свойства и Chars свойства, который возвращает строку в виде массива символов Юникода. Дополнительные сведения о строках см. в разделе System.String.

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

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

Строковый модуль

Дополнительные функции для обработки строк включаются в String модуль в FSharp.Core пространстве имен. Дополнительные сведения см. в разделе "Строковый модуль".

См. также