Partager via


Chaînes

Le string type représente un texte immuable sous la forme d’une séquence de caractères Unicode. string est un alias pour System.String .NET.

Remarques

Les littéraux de chaîne sont délimités par le caractère guillemet (") . Le caractère de barre oblique inverse (\) est utilisé 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 indiquées dans le tableau suivant.

Caractère Séquence d’échappement
Alerte \a
Retour arrière \b
Flux de formulaire \f
Newline \n
Retour chariot \r
Onglet \t
Tabulation verticale \v
Barre oblique inverse \\
Guillemet \"
Apostrophe \'
Caractère Unicode \DDD (où D indique un chiffre décimal ; plage de 000 à 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 \DDD séquence d’échappement est la notation décimale, et non la notation octale comme dans la plupart des autres langages. Par conséquent, les chiffres et sont valides8, et une séquence de \032 représente un espace (U+0020), alors que ce même point de code en notation octale serait \040.9

Remarque

Étant limités à une plage de 0 à 255 (0xFF), les \DDD séquences d’échappement et \x les séquences d’échappement sont effectivement le jeu de caractères ISO-8859-1 , car cela correspond aux 256 premiers points de code Unicode.

Chaînes détaillées

S’il est précédé du symbole @, le littéral est une chaîne détaillée. La déclaration d’une chaîne détaillée signifie que toutes les séquences d’échappement sont ignorées, sauf que deux guillemets sont interprétés comme un 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 détaillée ou une chaîne entre guillemets triples. Si vous utilisez une chaîne détaillée, vous devez spécifier deux guillemets pour indiquer un caractère de 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 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 l’encodage de 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 le caractère de barre oblique inverse est utilisé. 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 de chaînes et découpage

Vous pouvez accéder à des caractères individuels dans une chaîne à l’aide de la syntaxe de type tableau. Les exemples suivants permettent [] d’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 préférée.

printfn "%c" str1[1]

La sortie est b.

Vous pouvez également extraire des sous-chaînes à l’aide de la syntaxe de tranche 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 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 des 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 conservant 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"

String, classe

Étant donné que le type de chaîne en F# est en fait un type .NET Framework System.String , tous les System.String membres sont disponibles. System.String inclut l’opérateur + , qui est utilisé pour concaténer des chaînes, la Length propriété et la Chars propriété, 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.

En utilisant la Chars propriété 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 de chaîne

Des fonctionnalités supplémentaires pour la gestion des chaînes sont incluses dans le module dans l’espace StringFSharp.Core de noms. Pour plus d’informations, consultez Le module de chaîne.

Voir aussi