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.Stringkunt 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.

Zie ook