Ciągi
Typ string
reprezentuje niezmienny tekst jako sekwencję znaków Unicode. string
jest aliasem dla System.String
platformy .NET.
Uwagi
Literały ciągu są rozdzielane znakiem cudzysłowu ("). Znak ukośnika odwrotnego ( \ ) służy do kodowania niektórych znaków specjalnych. Ukośnik odwrotny i następny znak są nazywane sekwencją ucieczki. Sekwencje ucieczki obsługiwane w literałach ciągu języka F# są wyświetlane w poniższej tabeli.
Znak | Sekwencja ucieczki |
---|---|
Alerty | \a |
Backspace | \b |
Źródło danych formularzy | \f |
Newline | \n |
Powrót karetki | \r |
Tab | \t |
Karta pionowa | \v |
Ukośnik odwrotny | \\ |
Cudzysłowu | \" |
Apostrof | \' |
znak Unicode | \DDD (gdzie D wskazuje cyfrę dziesiętną; zakres od 000 do 255; na przykład \231 = "ç") |
znak Unicode | \xHH (gdzie H wskazuje cyfrę szesnastkową; zakres 00 – FF, \xE7 na przykład = "ç") |
znak Unicode | \uHHHH (UTF-16) (gdzie H wskazuje cyfrę szesnastkową; zakres 0000 – FFFF, \u00E7 na przykład = "ç") |
znak Unicode | \U00HHHHHH (UTF-32) (gdzie H wskazuje cyfrę szesnastkową; zakres od 000000 do 10FFFF, na przykład \U0001F47D = "👽") |
Ważne
Sekwencja \DDD
ucieczki to notacja dziesiętna, a nie notacja ósemkowa, jak w większości innych języków. W związku z tym cyfry 8
i 9
są prawidłowe, a sekwencja \032
reprezentuje spację (U+0020), natomiast ten sam punkt kodu w notacji ósemkowej to \040
.
Uwaga
Ograniczenie do zakresu od 0 do 255 (0xFF), \DDD
sekwencje ucieczki i \x
są skutecznie zestawem znaków ISO-8859-1 , ponieważ odpowiada to pierwszym punktom kodu Unicode 256.
Ciągi dosłowne
Jeśli jest poprzedzony symbolem @, literał jest ciągiem dosłownym. Deklarowanie ciągu dosłownego oznacza, że wszystkie sekwencje ucieczki są ignorowane, z wyjątkiem tego, że dwa znaki cudzysłowu są interpretowane jako jeden znak cudzysłowu.
Potrójne ciągi cytowane
Ponadto ciąg może być ujęta w cudzysłowy potrójne. W takim przypadku wszystkie sekwencje ucieczki są ignorowane, w tym znaki podwójnego cudzysłowu. Aby określić ciąg zawierający osadzony ciąg cudzysłowny, możesz użyć ciągu dosłownego lub potrójnego ciągu. Jeśli używasz ciągu dosłownego, musisz określić dwa znaki cudzysłowu, aby wskazać pojedynczy znak cudzysłowu. Jeśli używasz ciągu potrójnego, możesz użyć znaków pojedynczego cudzysłowu bez ich analizowania jako końca ciągu. Ta technika może być przydatna podczas pracy z kodem XML lub innymi strukturami, które zawierają osadzone znaki cudzysłowu.
// 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">"""
W kodzie ciągi, które mają podziały wierszy, są akceptowane, a podziały wierszy są interpretowane jako kodowanie nowego wiersza używane w źródle, chyba że znak ukośnika odwrotnego jest ostatnim znakiem przed podziałem wiersza. Wiodący biały znak w następnym wierszu jest ignorowany, gdy jest używany znak ukośnika odwrotnego. Poniższy kod tworzy ciąg str1
, który ma wartość "abc\ndef"
i ciąg str2
, który ma wartość "abcdef"
.
let str1 =
"abc
def"
let str2 =
"abc\
def"
Indeksowanie ciągów i fragmentowanie
Dostęp do poszczególnych znaków w ciągu można uzyskać przy użyciu składni podobnej do tablicy. W poniższych przykładach użyto metody []
do indeksowania ciągów. Ta składnia została wprowadzona w języku F# 6.0. Można również użyć .[]
funkcji do indeksowania ciągów we wszystkich wersjach. Preferowana jest nowa składnia.
printfn "%c" str1[1]
Wynik to b
.
Możesz też wyodrębnić podciągy przy użyciu składni wycinków tablicy, jak pokazano w poniższym kodzie.
printfn "%s" str1[0..2]
printfn "%s" str2[3..5]
Dane wyjściowe są następujące:
abc
def
Ciągi ASCII można reprezentować według tablic niepodpisanych bajtów, wpisz byte[]
. Sufiks B
jest dodany do literału ciągu, aby wskazać, że jest to ciąg ASCII. Literały ciągów ASCII używane z tablicami bajtów obsługują te same sekwencje ucieczki co ciągi Unicode, z wyjątkiem sekwencji ucieczki Unicode.
// "abc" interpreted as a Unicode string.
let str1: string = "abc"
// "abc" interpreted as an ASCII byte array.
let bytearray: byte[] = "abc"B
Operatory ciągów
Operator +
może służyć do łączenia ciągów, zachowując zgodność z funkcjami obsługi ciągów programu .NET Framework. Poniższy przykład ilustruje łączenie ciągów.
let string1 = "Hello, " + "world"
String, klasa
Ponieważ typ ciągu w języku F# jest w rzeczywistości typem programu .NET Framework System.String
, wszystkie System.String
elementy członkowskie są dostępne. System.String
+
zawiera operator , który jest używany do łączenia ciągów, Length
właściwości i Chars
właściwości, która zwraca ciąg jako tablicę znaków Unicode. Aby uzyskać więcej informacji na temat ciągów, zobacz System.String
.
Za pomocą Chars
właściwości System.String
, można uzyskać dostęp do poszczególnych znaków w ciągu, określając indeks, jak pokazano w poniższym kodzie.
let printChar (str: string) (index: int) =
printfn "First character: %c" (str.Chars(index))
Moduł ciągu
Dodatkowe funkcje obsługi ciągów są zawarte w String
module w FSharp.Core
przestrzeni nazw. Aby uzyskać więcej informacji, zobacz Moduł ciągu.