F# - 字符串

在F#中,字符串类型将不可变文本表示为Unicode字符序列.

字符串文字

字符串文字由引号分隔mark(")字符.

一些特殊字符用于特殊用途,如换行符,制表符等.它们使用反斜杠(\)字符进行编码.反斜杠字符和相关字符制作转义序列.下表显示了F#支持的转义序列.

CharacterEscape sequence
Backspace\b
Newline\n
Carriage return\r
Tab\t
Backslash\\
Quotation mark
Apostrophe\'
Unicode character\uXXXX or \UXXXXXXXX (where X indicates a hexadecimal digit)


以下两种方法使编译器忽略转义序列 :隐藏转义序列的方法

  • 使用@符号.

  • 将字符串括在三引号中.

当字符串文字前面带有@符号时,会调用它a 逐字字符串.这样,字符串中的所有转义序列都被忽略,除了两个引号字符被解释为一个引号字符.

一个字符串用三引号括起来,然后所有转义序列都被忽略,包括双引号字符.

示例

以下示例演示这项技术展示了如何使用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&LT;串GT; &RARR; string返回通过将给定字符串与分隔符连接而形成的新字符串.
存在:(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&rarr ; 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 "*! "

编译并执行程序时,它会产生以下输出 :

*! *! *! *! *! *! *! *! *! *!