Tekenreeksen
Het string
type vertegenwoordigt onveranderbare tekst als een reeks Unicode-tekens. string
is een alias voor System.String
in .NET.
Opmerkingen
Letterlijke tekenreeksen worden gescheiden door het aanhalingsteken ("). Het backslashteken ( \ ) wordt gebruikt om bepaalde speciale tekens te coderen. De backslash en het volgende teken worden samen een escape-reeks genoemd. Escape-reeksen die worden ondersteund in letterlijke F#-tekenreeksen, worden weergegeven in de volgende tabel.
Teken | Escape-reeks |
---|---|
Waarschuwing | \a |
Backspace | \b |
Formulierfeed | \f |
Newline | \n |
Regelterugloop | \r |
Tab | \t |
Verticaal tabblad | \v |
Backslash | \\ |
Aanhalingsteken | \" |
Apostrof | \' |
Unicode-teken | \DDD (waarbij D een decimaal getal wordt aangegeven; bereik van 000 - 255; bijvoorbeeld \231 = "ç") |
Unicode-teken | \xHH (waarbij H een hexadecimaal cijfer wordt aangegeven; bereik van 00 - FF; bijvoorbeeld \xE7 = "ç") |
Unicode-teken | \uHHHH (UTF-16) (waarbij H een hexadecimaal cijfer wordt aangegeven; bereik van 0000 - FFFF; bijvoorbeeld \u00E7 = "ç") |
Unicode-teken | \U00HHHHHH (UTF-32) (waarbij H een hexadecimaal cijfer wordt aangegeven; bereik van 000000 - 10FFFF; bijvoorbeeld \U0001F47D = "👽") |
Belangrijk
De \DDD
escapereeks is decimale notatie, geen octale notatie, zoals in de meeste andere talen. Daarom zijn cijfers 8
en 9
geldig, en een reeks \032
vertegenwoordigt een spatie (U+0020), terwijl hetzelfde codepunt in octale notatie zou zijn \040
.
Notitie
De en escapereeksen worden beperkt tot een bereik van 0 - 255 (0xFF), \DDD
\x
zijn de ISO-8859-1 tekenset, omdat deze overeenkomt met de eerste 256 Unicode-codepunten.
Exacte tekenreeksen
Als dit wordt voorafgegaan door het @-symbool, is de letterlijke tekenreeks een letterlijke tekenreeks. Het declareren van een exacte tekenreeks betekent dat escapereeksen worden genegeerd, behalve dat twee aanhalingstekens worden geïnterpreteerd als één aanhalingsteken.
Tekenreeksen met drie aanstekens
Daarnaast kan een tekenreeks tussen drie aanhalingstekens staan. In dit geval worden alle escapereeksen genegeerd, inclusief dubbele aanhalingstekens. Als u een tekenreeks wilt opgeven die een ingesloten aanhalingstekenreeks bevat, kunt u een verbatimtekenreeks of een tekenreeks met drie aanhalingstekens gebruiken. Als u een exacte tekenreeks gebruikt, moet u twee aanhalingstekens opgeven om één aanhalingsteken aan te geven. Als u een tekenreeks met drie aanhalingstekens gebruikt, kunt u de enkele aanhalingstekens gebruiken zonder dat deze als einde van de tekenreeks worden geparseerd. Deze techniek kan handig zijn wanneer u werkt met XML of andere structuren die ingesloten aanhalingstekens bevatten.
// 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">"""
In code worden tekenreeksen met regeleinden geaccepteerd en worden de regeleinden geïnterpreteerd als de nieuwe regelcodering die in de bron wordt gebruikt, tenzij een backslash het laatste teken vóór het regeleinde is. Voorloopspaties op de volgende regel worden genegeerd wanneer het backslash-teken wordt gebruikt. De volgende code produceert een tekenreeks str1
met waarde "abc\ndef"
en een tekenreeks str2
die een waarde "abcdef"
heeft.
let str1 =
"abc
def"
let str2 =
"abc\
def"
Tekenreeksindexering en segmentering
U kunt afzonderlijke tekens in een tekenreeks openen met behulp van een matrixachtige syntaxis. De volgende voorbeelden gebruiken []
om tekenreeksen te indexeren. Deze syntaxis is geïntroduceerd in F# 6.0. U kunt ook .[]
tekenreeksen indexeren in alle versies. De nieuwe syntaxis heeft de voorkeur.
printfn "%c" str1[1]
De uitvoer is b
.
U kunt ook subtekenreeksen extraheren met behulp van de syntaxis van het matrixsegment, zoals wordt weergegeven in de volgende code.
printfn "%s" str1[0..2]
printfn "%s" str2[3..5]
De uitvoer is als volgt.
abc
def
U kunt ASCII-tekenreeksen weergeven op matrices van niet-ondertekende bytes, typt byte[]
u . U voegt het achtervoegsel B
toe aan een letterlijke tekenreeks om aan te geven dat het een ASCII-tekenreeks is. Letterlijke asCII-tekenreeksen die worden gebruikt met bytematrices ondersteunen dezelfde escapereeksen als Unicode-tekenreeksen, met uitzondering van de Unicode-escapereeksen.
// "abc" interpreted as a Unicode string.
let str1: string = "abc"
// "abc" interpreted as an ASCII byte array.
let bytearray: byte[] = "abc"B
Tekenreeksoperatoren
De +
operator kan worden gebruikt om tekenreeksen samen te voegen, waarbij de compatibiliteit met de afhandelingsfuncties van .NET Framework-tekenreeksen behouden blijft. In het volgende voorbeeld ziet u tekenreekssamenvoeging.
let string1 = "Hello, " + "world"
Tekenreeksklasse
Omdat het tekenreekstype in F# eigenlijk een .NET Framework-type System.String
is, zijn alle System.String
leden beschikbaar. System.String
bevat de +
operator, die wordt gebruikt om tekenreeksen, de Length
eigenschap en de Chars
eigenschap samen te voegen, die de tekenreeks als matrix met Unicode-tekens retourneert. Zie voor meer informatie over tekenreeksen System.String
.
Met behulp van de Chars
eigenschap van System.String
kunt u de afzonderlijke tekens in een tekenreeks openen door een index op te geven, zoals wordt weergegeven in de volgende code.
let printChar (str: string) (index: int) =
printfn "First character: %c" (str.Chars(index))
Tekenreeksmodule
Aanvullende functionaliteit voor het verwerken van tekenreeksen is opgenomen in de String
module in de FSharp.Core
naamruimte. Zie De tekenreeksmodule voor meer informatie.