Chaînes
Le type string
représente le texte immuable en tant que séquence de caractères Unicode. string
est un alias de System.String
dans .NET.
Notes
Les littéraux de chaîne sont délimités par le caractère guillemet ("). La barre oblique inverse (\) est utilisée pour encoder certains caractères spéciaux. La barre oblique inverse et le caractère suivant sont appelés séquence d’échappement. Les séquences d’échappement prises en charge dans les littéraux de chaîne F# sont présentées dans le tableau suivant.
Caractère | Séquence d'échappement |
---|---|
Alerte | \a |
Retour arrière | \b |
Saut de page | \f |
Saut de ligne | \n |
Retour chariot | \r |
Onglet | \t |
Tabulation verticale | \v |
Barre oblique inverse | \\ |
Guillemets | \" |
Apostrophe | \' |
Caractère Unicode | \DDD (où D indique un chiffre décimal ; plage comprise entre 000 et 255 ; par exemple, \231 = « ç ») |
Caractère Unicode | \xHH (où H indique un chiffre hexadécimal ; plage de 00 - FF ; par exemple, \xE7 = « ç ») |
Caractère Unicode | \uHHHH (UTF-16) (où H indique un chiffre hexadécimal ; plage de 0000 - FFFF ; par exemple, \u00E7 = « ç ») |
Caractère Unicode | \U00HHHHHH (UTF-32) (où H indique un chiffre hexadécimal ; plage de 000000 - 10FFFF ; par exemple, \U0001F47D = « 👽 ») |
Important
La séquence d’échappement \DDD
est une notation décimale, et non une notation octale comme dans la plupart des autres langages. Par conséquent, les chiffres 8
et 9
sont valides, et une séquence de \032
représente un espace (U+0020), tandis que ce même point de code en notation octale serait \040
.
Notes
Étant limitées à une plage de 0 à 255 (0xFF), les séquences d’échappement \DDD
et \x
sont effectivement le jeu de caractères ISO-8859-1, car cela correspond aux 256 premiers points de code Unicode.
Chaînes textuelles
S’il est précédé du symbole @, le littéral est une chaîne textuelle. La déclaration d’une chaîne textuelle signifie que toutes les séquences d’échappement sont ignorées, sauf que deux guillemets sont interprétés comme un caractère de guillemet.
Chaînes entre guillemets triples
En outre, une chaîne peut être entourée de guillemets triples. Dans ce cas, toutes les séquences d’échappement sont ignorées, y compris les guillemets doubles. Pour spécifier une chaîne qui contient une chaîne entre guillemets incorporée, vous pouvez utiliser une chaîne textuelle ou une chaîne entre guillemets triples. Si vous utilisez une chaîne textuelle, vous devez spécifier deux guillemets pour indiquer un guillemet unique. Si vous utilisez une chaîne entre guillemets triples, vous pouvez utiliser les guillemets simples sans qu’ils soient analysés comme fin de la chaîne. Cette technique peut être utile lorsque vous travaillez avec du code XML ou d’autres structures qui incluent des guillemets incorporés.
// 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">"""
Dans le code, les chaînes qui ont des sauts de ligne sont acceptées, et les sauts de ligne sont interprétés comme le codage de nouvelle ligne utilisé dans la source, sauf si une barre oblique inverse est le dernier caractère avant le saut de ligne. L’espace blanc de début sur la ligne suivante est ignoré lorsque la barre oblique inverse est utilisée. Le code suivant produit une chaîne str1
qui a une valeur "abc\ndef"
et une chaîne str2
qui a la valeur "abcdef"
.
let str1 =
"abc
def"
let str2 =
"abc\
def"
Indexation et découpage de chaînes
Vous pouvez accéder à des caractères individuels dans une chaîne à l’aide de la syntaxe de type tableau. Les exemples suivants utilisent []
pour indexer des chaînes. Cette syntaxe a été introduite dans F# 6.0. Vous pouvez également utiliser .[]
pour indexer des chaînes dans toutes les versions. La nouvelle syntaxe est recommandée.
printfn "%c" str1[1]
La sortie est b
.
Vous pouvez également extraire des sous-chaînes à l’aide de la syntaxe de section de tableau, comme indiqué dans le code suivant.
printfn "%s" str1[0..2]
printfn "%s" str2[3..5]
La sortie est la suivante.
abc
def
Vous pouvez représenter des chaînes ASCII par des tableaux d’octets non signés, de type byte[]
. Vous ajoutez le suffixe B
à un littéral de chaîne pour indiquer qu’il s’agit d’une chaîne ASCII. Les littéraux de chaîne ASCII utilisés avec les tableaux d’octets prennent en charge les mêmes séquences d’échappement que les chaînes Unicode, à l’exception des séquences d’échappement Unicode.
// "abc" interpreted as a Unicode string.
let str1: string = "abc"
// "abc" interpreted as an ASCII byte array.
let bytearray: byte[] = "abc"B
Opérateurs de chaîne
L’opérateur +
peut être utilisé pour concaténer des chaînes, en maintenant la compatibilité avec les fonctionnalités de gestion des chaînes .NET Framework. L’exemple suivant illustre la concaténation de chaînes.
let string1 = "Hello, " + "world"
Classe String
Étant donné que le type de chaîne dans F# est en fait un type .NET Framework System.String
, tous les membres System.String
sont disponibles. System.String
inclut l’opérateur +
, qui est utilisé pour concaténer des chaînes, la propriété Length
, et la propriété Chars
qui retourne la chaîne sous la forme d’un tableau de caractères Unicode. Pour plus d’informations sur les chaînes, consultez System.String
.
À l’aide de la propriété Chars
de System.String
, vous pouvez accéder aux caractères individuels d’une chaîne en spécifiant un index, comme indiqué dans le code suivant.
let printChar (str: string) (index: int) =
printfn "First character: %c" (str.Chars(index))
Module String
Des fonctionnalités supplémentaires pour la gestion des chaînes sont incluses dans le module String
de l’espace de noms FSharp.Core
. Pour plus d’informations, consultez Module String.