该 string
类型将不可变文本表示为 Unicode 字符序列。
string
是 System.String
在 .NET 中的别名。
注解
字符串文本由引号 (“) 字符分隔。 反斜杠字符 (\) 用于对某些特殊字符进行编码。 反斜杠和下一个字符一起称为 转义序列。 下表显示了 F# 字符串文本中支持的转义序列。
字符 | 转义序列 |
---|---|
警报 | \a |
退格键 | \b |
换页 | \f |
换行符 | \n |
回车 | \r |
选项卡 | \t |
垂直制表符 | \v |
反斜杠 | \\ |
引号 | \" |
撇号 | \' |
Unicode 字符 |
\DDD (其中 D 指示十进制数字;范围为 000 - 255;例如, \231 = “ç”) |
Unicode 字符 |
\xHH (其中 H 指示十六进制数字;范围为 00 - FF;例如, \xE7 = “ç”) |
Unicode 字符 |
\uHHHH (UTF-16)(其中 H 指示十六进制数字;范围为 0000 - FFFF;例如, \u00E7 = “ç”) |
Unicode 字符 |
\U00HHHHHH (UTF-32)(其中 H 指示十六进制数字;范围为 000000 - 10FFFF;例如, \U0001F47D = “👽”) |
重要
\DDD
转义序列是十进制表示法,而不是八进制表示法,就像大多数其他语言一样。 因此,数字 8
和 9
有效,并且表示空格(U+0020)的 \032
序列,而八进制表示法中的相同代码点将是 \040
。
注释
由于与前 256 个 Unicode 码位匹配,并且转义序列实际上为 ISO-8859-1 字符集,受限制为 0 - 2555 (0xFF \DDD
\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">"""
在代码中,接受换行符的字符串,并且换行符被解释为源中使用的换行符,除非反斜杠字符是换行符之前的最后一个字符。 使用反斜杠字符时,将忽略下一行中的前导空格。 下面的代码生成一个字符串,该字符串str1
具有值"abc\ndef"
和一个具有值的"abcdef"
字符串str2
。
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
可以按无符号字节数组(类型 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 System.String
类型,因此所有 System.String
成员都可用。
System.String
包括用于 +
连接字符串、 Length
属性和 Chars
属性的运算符,该运算符将字符串作为 Unicode 字符数组返回。 有关字符串的详细信息,请参阅 System.String
。
通过使用 Chars
的属性 System.String
,可以通过指定索引来访问字符串中的单个字符,如以下代码所示。
let printChar (str: string) (index: int) =
printfn "First character: %c" (str.Chars(index))
字符串模块
用于字符串处理的其他功能包含在 String
命名空间的模块中 FSharp.Core
。 有关详细信息,请参阅 字符串模块。