Strängar
Typen string
representerar oföränderlig text som en sekvens med Unicode-tecken. string
är ett alias för System.String
i .NET.
Kommentarer
Strängliteraler avgränsas med citattecknet ("). Omvänt snedstreck ( \ ) används för att koda vissa specialtecken. Omvänt snedstreck och nästa tecken tillsammans kallas för en escape-sekvens. Escape-sekvenser som stöds i F#-strängliteraler visas i följande tabell.
Tecken | Escape-sekvens |
---|---|
Varning | \a |
Backsteg | \b |
Formulärfeed | \f |
Newline | \n |
Vagnretur | \r |
Flik | \t |
Lodrät flik | \v |
Omvänt snedstreck | \\ |
Citattecken | \" |
Apostrof | \' |
Unicode-tecken | \DDD (där D anger en decimalsiffra, intervallet 000–255, till exempel \231 = "ç") |
Unicode-tecken | \xHH (där H anger en hexadecimal siffra; intervallet 00 – FF, till exempel \xE7 = "ç") |
Unicode-tecken | \uHHHH (UTF-16) (där H anger en hexadecimal siffra; intervallet 0000 – FFFF; till exempel \u00E7 = "ç") |
Unicode-tecken | \U00HHHHHH (UTF-32) (där H anger en hexadecimal siffra; intervallet 000000–10FFFF, till exempel \U0001F47D = "👽") |
Viktigt!
Escape-sekvensen \DDD
är decimal notation, inte oktal notation som på de flesta andra språk. Därför är siffror 8
och 9
giltiga, och en sekvens med \032
representerar ett blanksteg (U+0020), medan samma kodpunkt i oktal notation skulle vara \040
.
Kommentar
Eftersom de är begränsade till ett intervall på 0–255 (0xFF) \DDD
är escape-sekvenserna i \x
själva verket iso-8859-1-teckenuppsättningen , eftersom det matchar de första 256 Unicode-kodpunkterna.
Ordagranna strängar
Om det föregås av @-symbolen är literalen en ordagrann sträng. Att deklarera en ordagrann sträng innebär att alla escape-sekvenser ignoreras, förutom att två citattecken tolkas som ett citattecken.
Tre citatsträngar
Dessutom kan en sträng omges av tre citattecken. I det här fallet ignoreras alla escape-sekvenser, inklusive dubbla citattecken. Om du vill ange en sträng som innehåller en inbäddad citerad sträng kan du antingen använda en ordagrann sträng eller en trippel-citerad sträng. Om du använder en ordagrann sträng måste du ange två citattecken för att ange ett enkelt citattecken. Om du använder en trippelciterad sträng kan du använda enkla citattecken utan att de parsas som slutet av strängen. Den här tekniken kan vara användbar när du arbetar med XML eller andra strukturer som innehåller inbäddade citattecken.
// 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">"""
I kod accepteras strängar som har radbrytningar och radbrytningarna tolkas som den nya linjekodning som används i källan, såvida inte ett omvänt snedstreck är det sista tecknet före radbrytningen. Inledande blanksteg på nästa rad ignoreras när omvänt snedstreck används. Följande kod genererar en sträng str1
som har ett värde "abc\ndef"
och en sträng str2
som har värdet "abcdef"
.
let str1 =
"abc
def"
let str2 =
"abc\
def"
Strängindexering och segmentering
Du kan komma åt enskilda tecken i en sträng med hjälp av matrisliknande syntax. I följande exempel används []
för att indexeras strängar. Den här syntaxen introducerades i F# 6.0. Du kan också använda .[]
för att indexeras strängar i alla versioner. Den nya syntaxen är att föredra.
printfn "%c" str1[1]
Utdata är b
.
Eller så kan du extrahera delsträngar med hjälp av matrissektorsyntax, som du ser i följande kod.
printfn "%s" str1[0..2]
printfn "%s" str2[3..5]
Utdata är följande.
abc
def
Du kan representera ASCII-strängar efter matriser med osignerade byte. Skriv byte[]
. Du lägger till suffixet B
i en strängliteral för att indikera att det är en ASCII-sträng. ASCII-strängliteraler som används med bytematriser stöder samma escape-sekvenser som Unicode-strängar, förutom Unicode-escape-sekvenserna.
// "abc" interpreted as a Unicode string.
let str1: string = "abc"
// "abc" interpreted as an ASCII byte array.
let bytearray: byte[] = "abc"B
Strängoperatorer
Operatorn +
kan användas för att sammanfoga strängar och upprätthålla kompatibilitet med .NET Framework-stränghanteringsfunktionerna. I följande exempel visas sammanlänkning av strängar.
let string1 = "Hello, " + "world"
Strängklass
Eftersom strängtypen i F# faktiskt är en .NET Framework-typ System.String
är alla System.String
medlemmar tillgängliga. System.String
innehåller operatorn +
, som används för att sammanfoga strängar, Length
egenskapen och Chars
egenskapen, som returnerar strängen som en matris med Unicode-tecken. Mer information om strängar finns i System.String
.
Genom att använda Chars
egenskapen System.String
för kan du komma åt de enskilda tecknen i en sträng genom att ange ett index, som visas i följande kod.
let printChar (str: string) (index: int) =
printfn "First character: %c" (str.Chars(index))
Strängmodul
Ytterligare funktioner för stränghantering ingår i modulen String
i FSharp.Core
namnområdet. Mer information finns i Strängmodul.