在F#中,字符串类型将不可变文本表示为Unicode字符序列。
字符串使用引号(")字符分隔,某些特殊字符用于特殊用途,如换行符,制表符等,它们使用反斜杠(\)字符进行编码,下表显示了F#支持的转义序列。
| 字符 | 转义序列 |
|---|---|
| 退格键 | \b |
| 换行 | \n |
| 返回 | \r |
| Tab | \t |
| 反斜杠 | \\ |
| 引号 | \" |
| 单引号 | \' |
| Unicode字符 | \uXXXX或\UXXXXXXXX(其中X表示十六进制数字) |
以下两种方式使编译器忽略转义序列-
当字符串文字的前面带有@符号时,它称为 verbatim字符串。
//Using a verbatim string let xmldata = @"<book author=""Lewis, C.S"" title=""Narnia"">" printfn "%s" xmldata
编译并执行程序时,将产生以下输出-
<book author="Lewis, C.S" title="Narnia">
下表显示了对字符串的基本操作-
| Value | 描述 |
|---|---|
| collect : (char → string) → string → string | 创建一个新字符串,该字符串的字符是对输入字符串的每个字符应用指定功能并将其串联后的结果。 |
| concat : string → seq<string> → string | 返回通过将给定的字符串与分隔符连接而构成的新字符串。 |
| exists : (char → bool) → string → bool | 测试字符串的任何字符是否满足给定条件。 |
| forall : (char → bool) → string → bool | 测试字符串中的所有字符是否满足给定条件。 |
| init : int → (int → string) → string | 创建一个新字符串,该字符串的字符是对每个索引应用指定函数并将这些字符串连接在一起的结果。 |
| iter : (char → unit) → string → unit | 将指定的函数应用于字符串中的每个字符。 |
| iteri : (int → char → unit) → string → unit | 将指定的函数应用于字符串中每个字符的索引以及字符本身。 |
| length : string → int | 返回字符串的长度。 |
| map : (char → char) → string → string | 创建一个新字符串,其字符是对输入字符串的每个字符应用指定功能的结果。 |
| mapi : (int → char → char) → string → string | 创建一个新字符串,其字符是对输入字符串的每个字符和索引应用指定功能的结果。 |
| replicate : int → string → string | 通过串联指定数目的字符串实例来返回字符串。 |
以下示例演示了上述某些功能的用法-
String.collect 函数将构建一个新字符串,该字符串的字符是将指定函数应用于输入字符串的每个字符并将它们连接在一起的输出。
let collectTesting inputS = String.collect (fun c -> sprintf "%c " c) inputS printfn "%s" (collectTesting "Happy New Year!")
编译并执行程序时,将产生以下输出-
H a p p y N e w Y e a r !
String.concat函数使用分隔符将给定的字符串序列连接起来,并返回新的字符串。
let strings = [ "Tutorials Point"; "Coding Ground"; "Absolute Classes" ] let ourProducts = String.concat "\n" strings printfn "%s" ourProducts
编译并执行程序时,将产生以下输出-
Tutorials Point Coding Ground Absolute Classes
String.replicate方法通过连接指定数目的字符串来返回字符串。
printfn "%s" <| String.replicate 10 "*! "
编译并执行程序时,将产生以下输出-
*! *! *! *! *! *! *! *! *! *!
祝学习愉快!(内容编辑有误?请选中要编辑内容 -> 右键 -> 修改 -> 提交!)