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 "*! "

編譯並執行程式後,將產生以下輸出:

*! *! *! *! *! *! *! *! *! *!
廣告

© . All rights reserved.