Строки
Тип 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
пространстве имен. Дополнительные сведения см. в разделе "Строковый модуль".