Stringhe
Il string
tipo rappresenta un testo non modificabile come sequenza di caratteri Unicode. string
è un alias per System.String
in .NET.
Osservazioni:
I valori letterali stringa sono delimitati dal carattere virgolette ("). Il carattere barra rovesciata ( \ ) viene usato per codificare determinati caratteri speciali. La barra rovesciata e il carattere successivo insieme sono noti come sequenza di escape. Le sequenze di escape supportate nei valori letterali stringa F# sono illustrate nella tabella seguente.
Carattere | Sequenza di escape |
---|---|
Avviso | \a |
Backspace | \b |
Avanzamento carta | \f |
Nuova riga | \n |
Ritorno a capo | \r |
Tab | \t |
Tabulazione verticale | \v |
Barra rovesciata | \\ |
Virgoletta | \" |
Apostrofo | \' |
Carattere Unicode | \DDD (dove D indica una cifra decimale; intervallo di 000 - 255; ad esempio, \231 = "ç") |
Carattere Unicode | \xHH (dove H indica una cifra esadecimale; intervallo di 00 - FF; ad esempio, \xE7 = "ç") |
Carattere Unicode | \uHHHH (UTF-16) (dove H indica una cifra esadecimale; intervallo di 0000 - FFFF; ad esempio, \u00E7 = "ç") |
Carattere Unicode | \U00HHHHHH (UTF-32) (dove H indica una cifra esadecimale; intervallo di 000000 - 10FFFF; ad esempio, \U0001F47D = "👽") |
Importante
La \DDD
sequenza di escape è la notazione decimale, non la notazione ottale come nella maggior parte degli altri linguaggi. Pertanto, le 8
cifre e 9
sono valide e una sequenza di \032
rappresenta uno spazio (U+0020), mentre lo stesso punto di codice nella notazione ottale sarebbe \040
.
Nota
Essendo vincolato a un intervallo compreso tra 0 e 255 (0xFF), le \DDD
sequenze di escape e \x
sono effettivamente il set di caratteri ISO-8859-1 , poiché corrisponde ai primi 256 punti di codice Unicode.
Stringhe verbatim
Se preceduto dal simbolo @, il valore letterale è una stringa verbatim. La dichiarazione di una stringa verbatim significa che tutte le sequenze di escape vengono ignorate, ad eccezione del fatto che due virgolette vengono interpretate come virgolette.
Stringhe con virgolette triple
Inoltre, una stringa può essere racchiusa tra virgolette triple. In questo caso, tutte le sequenze di escape vengono ignorate, incluse le virgolette doppie. Per specificare una stringa che contiene una stringa tra virgolette incorporata, è possibile usare una stringa verbatim o una stringa con virgolette triple. Se si utilizza una stringa verbatim, è necessario specificare due virgolette per indicare una virgoletta singola. Se si usa una stringa con virgolette triple, è possibile usare le virgolette singole senza analizzarle come fine della stringa. Questa tecnica può essere utile quando si lavora con XML o altre strutture che includono virgolette incorporate.
// 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">"""
Nel codice, le stringhe con interruzioni di riga vengono accettate e le interruzioni di riga vengono interpretate come la codifica di nuova riga utilizzata nell'origine, a meno che un carattere barra rovesciata non sia l'ultimo carattere prima dell'interruzione di riga. Lo spazio vuoto iniziale sulla riga successiva viene ignorato quando viene utilizzato il carattere barra rovesciata. Il codice seguente genera una stringa str1
con valore "abc\ndef"
e una stringa str2
con valore "abcdef"
.
let str1 =
"abc
def"
let str2 =
"abc\
def"
Indicizzazione di stringhe e sezionamento
È possibile accedere a singoli caratteri in una stringa usando la sintassi simile a una matrice. Negli esempi seguenti viene usato []
per indicizzare le stringhe. Questa sintassi è stata introdotta in F# 6.0. È anche possibile usare .[]
per indicizzare le stringhe in tutte le versioni. La nuova sintassi è preferibile.
printfn "%c" str1[1]
L'output è b
.
In alternativa, è possibile estrarre sottostringhe usando la sintassi della sezione di matrice, come illustrato nel codice seguente.
printfn "%s" str1[0..2]
printfn "%s" str2[3..5]
L'output è indicato di seguito.
abc
def
È possibile rappresentare stringhe ASCII in base a matrici di byte senza segno, digitare byte[]
. Aggiungere il suffisso B
a un valore letterale stringa per indicare che si tratta di una stringa ASCII. I valori letterali stringa ASCII usati con matrici di byte supportano le stesse sequenze di escape delle stringhe Unicode, ad eccezione delle sequenze di escape Unicode.
// "abc" interpreted as a Unicode string.
let str1: string = "abc"
// "abc" interpreted as an ASCII byte array.
let bytearray: byte[] = "abc"B
Operatori di stringhe
L'operatore +
può essere usato per concatenare stringhe, mantenendo la compatibilità con le funzionalità di gestione delle stringhe di .NET Framework. Nell'esempio seguente viene illustrata la concatenazione di stringhe.
let string1 = "Hello, " + "world"
Classe String
Poiché il tipo stringa in F# è in realtà un tipo .NET Framework System.String
, tutti i System.String
membri sono disponibili. System.String
include l'operatore +
, utilizzato per concatenare stringhe, la Length
proprietà e la Chars
proprietà , che restituisce la stringa come matrice di caratteri Unicode. Per altre informazioni sulle stringhe, vedere System.String
.
Usando la Chars
proprietà di System.String
, è possibile accedere ai singoli caratteri in una stringa specificando un indice, come illustrato nel codice seguente.
let printChar (str: string) (index: int) =
printfn "First character: %c" (str.Chars(index))
Modulo stringa
Le funzionalità aggiuntive per la String
gestione delle stringhe sono incluse nel modulo nello spazio dei FSharp.Core
nomi . Per altre informazioni, vedere Modulo stringa.