Stringhe (F#)
Il tipo string rappresenta testo non modificabile, sotto forma di una sequenza di caratteri Unicode. Il tipo string è un alias dell'elemento String in .NET Framework.
Note
I valori letterali stringa vengono delimitati dalle virgolette ("). Il carattere barra rovesciata (\) viene utilizzato per codificare determinati caratteri speciali. La barra rovesciata e il carattere successivo 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 |
---|---|
Backspace |
\b |
Nuova riga |
\n |
Ritorno a capo |
\r |
Tab |
\t |
Barra rovesciata |
\\ |
Virgolette |
\" |
Apostrofo |
\' |
Carattere Unicode |
\uXXXX o \UXXXXXXXX (dove X indica una cifra esadecimale) |
Se preceduto dal simbolo @, il valore letterale è una stringa verbatim. Qualsiasi sequenza di escape viene dunque ignorata, con l'eccezione dei due caratteri di virgolette che vengono interpretati come un solo carattere di virgolette.
Nel codice vengono accettate le stringhe in cui sono presenti interruzioni di riga, interpretate letteralmente come nuove righe, a meno che un carattere barra rovesciata non sia l'ultimo carattere prima dell'interruzione di riga. In questo caso lo spazio vuoto all'inizio della riga successiva viene ignorato. Il codice seguente consente di creare una stringa str1 con valore "abc\r\n def" e una stringa str2 con valore "abcdef".
let str1 = "abc
def"
let str2 = "abc\
def"
Nell'utilizzo delle stringhe, F# mantiene i caratteri di interruzione di riga senza variazioni, pertanto se si desidera leggere una stringa da un file con l'avanzamento riga (LF o \n) o il ritorno a capo e l'avanzamento riga (CRLF o \ r\ n) come carattere di nuova riga, questi vengono mantenuti.
È possibile accedere ai singoli caratteri in una stringa mediante una sintassi analoga a quella delle matrici, come indicato di seguito.
printfn "%c" str1.[1]
L'output è b.
In alternativa, è possibile estrarre le sottostringhe utilizzando la sintassi di sezione delle matrici, come indicato nel codice seguente.
printfn "%s" (str1.[0..2])
printfn "%s" (str2.[3..5])
L'output è indicato di seguito.
abc
def
È possibile rappresentare le stringhe ASCII con matrici di byte senza segno, di tipo byte[]. Aggiungendo il suffisso B a un valore letterale stringa, è possibile indicare che si tratta di una stringa ASCII. I valori letterali stringa ASCII utilizzati con le 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 stringa
È possibile concatenare le stringhe in due modi, con l'operatore + o con l'operatore ^. L'operatore + garantisce la compatibilità con le funzionalità di gestione delle stringhe .NET Framework.
Nell'esempio seguente viene illustrata una concatenazione di stringhe.
let string1 = "Hello, " + "world"
Classe String
Poiché il tipo stringa in F# è in effetti un tipo String .NET Framework, sono disponibili tutti i membri String, tra cui l'operatore +, utilizzato per concatenare le stringhe, la proprietà Length e la proprietà Chars, che restituisce la stringa come matrice di caratteri Unicode. Per ulteriori informazioni sulle stringhe, vedere String.
Utilizzando la proprietà Chars di String, è possibile accedere ai singoli caratteri di una stringa specificando un indice, come indicato nel codice riportato di seguito.
let printChar (str : string) (index : int) =
printfn "First character: %c" (str.Chars(index))
Modulo String
Nello spazio dei nomi FSharp.Core del modulo String sono disponibili funzionalità aggiuntive per la gestione delle stringhe. Per ulteriori informazioni, vedere Modulo Core.String (F#).