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.

Vedi anche