字符串 (F#)
string 类型将不可变文本表示为由 Unicode 字符组成的序列。 string 是 .NET Framework 中 String 的别名。
备注
字符串文本由引号 (") 字符分隔。 反斜杠字符 (\) 用于对某些特殊字符进行编码。 反斜杠及后面的字符统称为“转义序列”。 下表中显示了 F# 字符串文本中支持的转义序列。
字符 |
转义序列 |
---|---|
Backspace |
\b |
换行符 |
\n |
回车 |
\r |
Tab |
\t |
反斜杠 |
\\ |
引号 |
\" |
撇号 |
\' |
Unicode 字符 |
\uXXXX 或 \UXXXXXXXX(其中 X 指示一个十六进制数字) |
如果文本的前面有“@”符号,则该文本是原义字符串。 这意味着,将忽略任何转义序列,除非将两个引号字符解释为一个引号字符。
此外,字符串可能由三个引号括起来。 在这种情况下,将忽略任何转义序列,包含双引号字符。 若要指定包含嵌入式带引号的字符串,可以使用原义字符串或一个三个带引号的字符串。 如果使用原义字符串,必须指定两个引号字符指示一个单引号字符。 如果使用的是三次带引号的字符串,可以使用单引号字符,而无需作为字符串的末尾分析的它们。 此方法非常有用,当使用包含嵌入的引号的 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">"""
在代码中,除非反斜杠字符是换行符之前的最后一个字符,否则将接受包含换行符的字符串,并将这些换行符按字面解释为换行符。 当使用反斜杠字符时,将忽略下一行上的前导空白。 下面的代码生成一个包含值 "abc\n def" 的字符串 str1 和一个包含值 "abcdef" 的字符串 str2。
let str1 = "abc
def"
let str2 = "abc\
def"
可以使用类似数组的语法访问字符串中的各个字符,如下所示。
printfn "%c" str1.[1]
输出为 b。
或者,可以使用数组切片语法提取子字符串,如下面的代码所示。
printfn "%s" (str1.[0..2])
printfn "%s" (str2.[3..5])
输出如下所示。
abc
def
可以使用无符号字节的数组(即,类型 byte[])表示 ASCII 字符串。 您可以向字符串文本中添加后缀 B,以指示该字符串文本为 ASCII 字符串。 与字节数组一起使用的 ASCII 字符串文本支持与 Unicode 字符串相同的转义序列(Unicode 转义序列除外)。
// "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"
字符串类
由于 F# 中的字符串类型实际上是 .NET Framework String 类型,因此所有 String 成员都可用。 其中包括 + 运算符(用于串联字符串)、Length 属性和 Chars 属性(以 Unicode 字符数组的形式返回字符串)。 有关字符串的更多信息,请参见 String。
通过使用 String 的 Chars 属性,您可以通过指定索引来访问字符串中的各个字符,如下面的代码中所示。
let printChar (str : string) (index : int) =
printfn "First character: %c" (str.Chars(index))
String 模块
用于字符串处理的附加功能包括在 FSharp.Core 命名空间的 String 模块中。 有关更多信息,请参见 Core.String 模块 (F#)。