Share via


字串

string 型別會以一連串的 Unicode 字元表示不可變文字。 stringSystem.String 在 .NET 中的別名。

備註

字串常值會以引號 (") 字元分隔。 反斜線字元 ( \ ) 會用來編碼特定特殊字元。 反斜線和下一個字元一起稱為逸出序列。 下表顯示 F# 字串常值中支援的逸出序列。

字元 逸出序列
警示 \a
退格鍵 \b
換頁字元 \f
新行字元 \n
歸位字元 \r
定位字元 \t
垂直 Tab 鍵 \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 逸出序列是十進位標記法,而不是八進位標記法,就像大部分其他語言一樣。 因此,數字 89 是有效的,且 \032 序列代表空格 (U+0020),而八進位標記法中的相同字碼指標是 \040

注意

受限於 0 - 255 (0xFF) 的範圍,\DDD\x 逸出序列實際上是 ISO-8859-1 字元集,因為這符合前 256 個 Unicode 字碼指標。

逐字字串

如果前面加上 @ 符號,該常值就是逐字字串。 宣告逐字字串表示會忽略任何逸出序列,但兩個引號字元會解譯為一個引號字元。

三引號字串

此外,字串可能會以三引號括住。 在此情況下會忽略所有逸出序列,包括雙引號字元。 若要指定包含內嵌引號字串的字串,您可以使用逐字字串或三引號字串。 如果您使用逐字字串,則必須指定兩個引號字元來表示單引號字元。 如果您使用三引號字串,則可以使用單引號字元,不會將其剖析為字串結尾。 當您使用包含內嵌引號的 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">"""

程式碼中可接受具有分行符號的字串,而且分行符號會解譯為用於來源中的新行編碼,除非反斜線字元是分行符號之前的最後一個字元。 使用反斜線字元時,下一行的前置空白字元會遭到忽略。 下列程式碼會產生具有 "abc\ndef" 值的 str1 字串,以及具有 "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

您可以使用不帶正負號位元組的陣列來表示 ASCII 字串,請輸入 byte[]。 您可以將尾碼 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

藉由使用 System.StringChars 屬性,您可以藉由指定索引來存取字串中的個別字元,如下列程式碼所示。

let printChar (str: string) (index: int) =
    printfn "First character: %c" (str.Chars(index))

字串模組

字串處理的其他功能會包含在 FSharp.Core 命名空間的 String 模組中。 如需詳細資訊,請參閱字串模組

另請參閱