- F# 基础教程
- F# - 首页
- F# - 概述
- F# - 环境设置
- F# - 程序结构
- F# - 基本语法
- F# - 数据类型
- F# - 变量
- F# - 运算符
- F# - 决策
- F# - 循环
- F# - 函数
- F# - 字符串
- F# - 可选类型
- F# - 元组
- F# - 记录
- F# - 列表
- F# - 序列
- F# - 集合
- F# - 映射
- F# - 辨别联合
- F# - 可变数据
- F# - 数组
- F# - 可变列表
- F# - 可变字典
- F# - 基本输入/输出
- F# - 泛型
- F# - 委托
- F# - 枚举
- F# - 模式匹配
- F# - 异常处理
- F# - 类
- F# - 结构体
- F# - 运算符重载
- F# - 继承
- F# - 接口
- F# - 事件
- F# - 模块
- F# - 命名空间
F# - 字符串
在 F# 中,字符串类型表示不可变的文本,作为 Unicode 字符序列。
字符串字面量
字符串字面量由双引号 (") 字符分隔。
有一些特殊字符用于特殊用途,例如换行符、制表符等。它们使用反斜杠 (\) 字符进行编码。反斜杠字符和相关字符构成转义序列。下表显示了 F# 支持的转义序列。
| 字符 | 转义序列 |
|---|---|
| 退格 | \b |
| 换行 | \n |
| 回车 | \r |
| 制表符 | \t |
| 反斜杠 | \\ |
| 双引号 | \" |
| 单引号 | \' |
| Unicode 字符 | \uXXXX 或 \UXXXXXXXX(其中 X 表示十六进制数字) |
忽略转义序列的方法
以下两种方法使编译器忽略转义序列:
- 使用 @ 符号。
- 将字符串括在三个双引号中。
当字符串字面量前面带有 @ 符号时,称为逐字字符串。这样,字符串中的所有转义序列都将被忽略,但两个双引号字符将被解释为一个双引号字符。
当字符串用三个双引号括起来时,所有转义序列也将被忽略,包括双引号字符。
示例
以下示例演示了此技术,展示了如何处理包含嵌入式双引号的 XML 或其他结构:
// Using a verbatim string let xmldata = @"<book author = ""Lewis, C.S"" title = ""Narnia"">" printfn "%s" xmldata
编译并执行程序后,将产生以下输出:
<book author = "Lewis, C.S" title = "Narnia">
字符串的基本运算符
下表显示了字符串的基本操作:
| 值 | 描述 |
|---|---|
| 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 | 通过连接指定数量的字符串实例来返回一个字符串。 |
以下示例演示了一些上述功能的用法:
示例 1
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 !
示例 2
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
示例 3
String.replicate 方法通过连接指定数量的字符串实例来返回一个字符串。
printfn "%s" <| String.replicate 10 "*! "
编译并执行程序后,将产生以下输出:
*! *! *! *! *! *! *! *! *! *!
广告