Zeichenfolgen
Der string
-Typ stellt unveränderlichen Text als eine Sequenz von Unicodezeichen dar. string
ist ein Alias für System.String
in .NET.
Bemerkungen
Zeichenfolgenliterale werden durch das Anführungszeichen (") getrennt. Der umgekehrte Schrägstrich ( \ ) wird verwendet, um bestimmte Sonderzeichen zu codieren. Die Kombination aus umgekehrtem Schrägstrich und dem nächsten Zeichen wird als Escapesequenz bezeichnet. Escapesequenzen, die in F#-Zeichenfolgenliteralen unterstützt werden, sind in der folgenden Tabelle aufgelistet.
Zeichen | Escapesequenz |
---|---|
Warnung | \a |
Rücktaste | \b |
Seitenvorschub | \f |
Zeilenumbruch | \n |
Wagenrücklauf | \r |
Registerkarte | \t |
Vertikaler Tabulator | \v |
Umgekehrter Schrägstrich | \\ |
Anführungszeichen | \" |
Apostroph | \' |
Unicode-Zeichen | \DDD (wobei D eine Dezimalzahl angibt; Bereich von 000 bis 255; z. B. \231 = "ç") |
Unicode-Zeichen | \xHH (wobei H eine Hexadezimalzahl angibt; Bereich von 00 bis FF; z. B. \xE7 = "ç") |
Unicode-Zeichen | \uHHHH (UTF-16) (wobei H eine Hexadezimalzahl angibt; Bereich von 0000 bis FFFF; z. B. \u00E7 = "ç") |
Unicode-Zeichen | \U00HHHHHH (UTF-32) (wobei H eine Hexadezimalzahl angibt; Bereich von 000000 bis 10FFFF; z. B. \U0001F47D = "👽") |
Wichtig
Die Escapesequenz \DDD
ist eine Dezimalnotation, keine oktale Notation wie in den meisten anderen Programmiersprachen. Daher sind die Ziffern 8
und 9
gültig, und eine Sequenz von \032
stellt ein Leerzeichen (U+0020) dar, während derselbe Codepunkt in oktaler Schreibweise \040
entspräche.
Hinweis
Da die Escapesequenzen \DDD
und \x
auf einen Bereich von 0 bis 255 (0xFF) beschränkt sind, handelt es sich bei ihnen um den ISO-8859-1-Zeichensatz, da dieser den ersten 256 Unicode-Codepunkten entspricht.
Ausführliche Zeichenfolge
Wenn das @-Symbol vorangestellt ist, handelt es sich bei dem Literal um eine ausführliche Zeichenfolge. Das Deklarieren einer ausführlichen Zeichenfolge bedeutet, dass alle Escapesequenzen ignoriert werden, mit der Ausnahme, dass zwei Anführungszeichen als ein Anführungszeichen interpretiert werden.
Zeichenfolgen in dreifachen Anführungszeichen
Darüber hinaus kann eine Zeichenfolge von dreifachen Anführungszeichen umschlossen werden. In diesem Fall werden alle Escapesequenzen ignoriert, einschließlich denen mit doppelten Anführungszeichen. Um eine Zeichenfolge anzugeben, die eine eingebettete Zeichenfolge in Anführungszeichen enthält, können Sie entweder eine ausführliche Zeichenfolge oder eine Zeichenfolge mit dreifachen Anführungszeichen verwenden. Wenn Sie eine ausführliche Zeichenfolge verwenden, müssen Sie zwei Anführungszeichen für ein einfaches Anführungszeichen angeben. Wenn Sie eine Zeichenfolge mit dreifachen Anführungszeichen verwenden, können Sie die einfachen Anführungszeichen verwenden, ohne dass sie als Ende der Zeichenfolge geparst werden. Diese Technik kann nützlich sein, wenn Sie mit XML oder anderen Strukturen arbeiten, die eingebettete Anführungszeichen enthalten.
// 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">"""
Im Code werden Zeichenfolgen mit Zeilenumbrüchen akzeptiert. Die Zeilenumbrüche werden als Zeilenumbrüche gemäß der Codierung der Quelle interpretiert, es sei denn das letzte Zeichen vor dem Zeilenumbruch ist ein umgekehrter Schrägstrich. Eingezogene Leerzeichen in der nächsten Zeile werden ignoriert, wenn der umgekehrte Schrägstrich verwendet wird. Der folgende Code erzeugt eine Zeichenfolge str1
, die den Wert "abc\ndef"
und eine Zeichenfolge str2
mit dem Wert "abcdef"
aufweist.
let str1 =
"abc
def"
let str2 =
"abc\
def"
Zeichenfolgenindizierung und Slicing
Sie können mithilfe einer arrayähnlichen Syntax auf einzelne Zeichen in einer Zeichenfolge zugreifen. In den folgenden Beispielen wird []
verwendet, um Zeichenfolgen zu indizieren. Diese Syntax wurde in Version 6.0 von F# eingeführt. Sie können auch .[]
verwenden, um Zeichenfolgen in allen Versionen zu indizieren. Die neue Syntax wird bevorzugt.
printfn "%c" str1[1]
Die Ausgabe lautet b
.
Alternativ können Sie Teilzeichenfolgen mithilfe der Arrayslicesyntax extrahieren, wie im folgenden Code gezeigt wird.
printfn "%s" str1[0..2]
printfn "%s" str2[3..5]
Die Ausgabe lautet wie folgt.
abc
def
Um ASCII-Zeichenfolgen durch Arrays aus Bytes ohne Vorzeichen darzustellen, geben Sie byte[]
ein. Fügen Sie das Suffix B
einem Zeichenfolgenliteral hinzu, um anzugeben, dass es sich um eine ASCII-Zeichenfolge handelt. ASCII-Zeichenfolgenliterale, die mit Bytearrays verwendet werden, unterstützen die gleichen Escapesequenzen wie Unicodezeichenfolgen, mit Ausnahme der Escapesequenzen für Unicodezeichen.
// "abc" interpreted as a Unicode string.
let str1: string = "abc"
// "abc" interpreted as an ASCII byte array.
let bytearray: byte[] = "abc"B
Zeichenfolgenoperatoren
Der +
-Operator kann zum Verketten von Zeichenfolgen verwendet werden, wobei die Kompatibilität mit den Zeichenfolgenbehandlungsfeatures von .NET Framework erhalten bleibt. Im folgenden Beispiel wird die Zeichenfolgenverkettung veranschaulicht.
let string1 = "Hello, " + "world"
Zeichenfolgenklasse
Da der Zeichenfolgentyp in F# eigentlich ein System.String
-Typ von .NET Framework ist, sind alle System.String
-Member verfügbar. System.String
enthält den +
-Operator, der zum Verketten von Zeichenfolgen verwendet wird, die Length
-Eigenschaft sowie die Chars
-Eigenschaft, die die Zeichenfolge als Array aus Unicode-Zeichen zurückgibt. Weitere Informationen zu Zeichenfolgen finden Sie unter System.String
.
Mit der Chars
-Eigenschaft von System.String
können Sie auf die einzelnen Zeichen in einer Zeichenfolge zugreifen, indem Sie wie im folgenden Code gezeigt einen Index angeben.
let printChar (str: string) (index: int) =
printfn "First character: %c" (str.Chars(index))
Zeichenfolgenmodul
Zusätzliche Funktionalität für die Zeichenfolgenbehandlung ist im String
-Modul im FSharp.Core
-Namespace enthalten. Weitere Informationen finden Sie unter Zeichenfolgenmodul.