Cadenas

El tipo string representa texto inmutable como una secuencia de caracteres Unicode. string es un alias de System.String en .NET.

Comentarios

Los literales de cadena se delimitan por el carácter de comillas ("). El carácter de barra diagonal inversa ( \ ) se usa para codificar determinados caracteres especiales. La barra diagonal inversa y el siguiente carácter juntos se conocen como una secuencia de escape. Las secuencias de escape admitidas en literales de cadena de F# se muestran en la siguiente tabla.

Carácter Secuencia de escape
Alerta \a
Retroceso \b
Avance de página \f
Nueva línea \n
Retorno de carro \r
Pestaña \t
Tabulación vertical \v
Barra diagonal inversa \\
Comillas \"
Apóstrofo \'
carácter Unicode \DDD (donde D indica un dígito decimal; intervalo de 000 - 255; por ejemplo, \231 = «ç»)
carácter Unicode \xHH (donde H indica un dígito hexadecimal; intervalo de 00 - FF; por ejemplo, \xE7 = «ç»)
carácter Unicode \uHHHH (UTF-16) (donde H indica un dígito hexadecimal; intervalo de 0000 - FFFF; por ejemplo, \u00E7 = «ç»)
carácter Unicode \U00HHHHHH (UTF-32) (donde H indica un dígito hexadecimal; intervalo de 000000 - 10FFFF; por ejemplo, \U0001F47D = «👽»)

Importante

La secuencia de escape \DDD es notación decimal, no notación octal como en la mayoría de los demás lenguajes. Por lo tanto, los dígitos 8 y 9 son válidos, y una secuencia de \032 representa un espacio (U+0020), mientras que ese mismo punto de código en notación octal sería \040.

Nota

Al restringirse a un intervalo de 0 a 255 (0xFF), las secuencias de escape \DDD y \x son efectivamente el juego de caracteres ISO-8859-1, ya que coincide con los primeros 256 puntos de código Unicode.

Cadena textual

Si va precedido por el símbolo @, el literal es una cadena textual. Declarar una cadena textual significa que se omiten las secuencias de escape, salvo que dos caracteres de comillas se interpretan como un carácter de comillas.

Cadenas delimitadas por comillas triples

Además, una cadena se puede incluir entre comillas triples. En este caso, se omiten todas las secuencias de escape, incluidos los caracteres de comillas dobles. Para especificar una cadena que contiene una cadena entre comillas incrustada, puede usar una cadena textual o una cadena delimitada por comillas triples. Si usa una cadena textual, debe especificar dos caracteres de comillas para indicar un carácter de comilla simple. Si usa una cadena delimitada por comillas triples, puede usar los caracteres de comillas simples sin que se analicen como el final de la cadena. Esta técnica puede ser útil cuando se trabaja con XML u otras estructuras que incluyen comillas incrustadas.

// 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">"""

En el código, se aceptan cadenas que tienen saltos de línea y los saltos de línea se interpretan como la codificación de nueva línea utilizada en el código fuente, a menos que un carácter de barra diagonal inversa sea el último carácter antes del salto de línea. El espacio en blanco inicial de la línea siguiente se omite cuando se usa el carácter de barra diagonal invertida. El código siguiente genera una cadena str1 que tiene el valor "abc\ndef" y una cadena str2 que tiene el valor "abcdef".

let str1 =
    "abc
def"

let str2 =
    "abc\
def"

Indexación y segmentación de cadenas

Puede acceder a caracteres individuales en una cadena mediante la sintaxis similar a la matriz. En los ejemplos siguientes se usan [] para indexar cadenas. Esta sintaxis se introdujo en F# 6.0. También puede usar .[] para indexar cadenas en todas las versiones. Se prefiere la nueva sintaxis.

printfn "%c" str1[1]

La salida es b.

O bien, puede extraer subcadenas mediante la sintaxis del segmento de matriz, como se muestra en el código siguiente.

printfn "%s" str1[0..2]
printfn "%s" str2[3..5]

La salida es la siguiente.

abc
def

Puede representar cadenas ASCII por matrices de bytes sin signo, escriba byte[]. Agregue el sufijo B a un literal de cadena para indicar que es una cadena ASCII. Los literales de cadena ASCII usados con matrices de bytes admiten las mismas secuencias de escape que las cadenas Unicode, excepto las secuencias de escape Unicode.

// "abc" interpreted as a Unicode string.
let str1: string = "abc"
// "abc" interpreted as an ASCII byte array.
let bytearray: byte[] = "abc"B

Operadores de cadena

El operador + se puede usar para concatenar cadenas, manteniendo la compatibilidad con las características de control de cadenas de .NET Framework. En el ejemplo siguiente se muestra la concatenación de tablas.

let string1 = "Hello, " + "world"

Clase de cadenas

Dado que el tipo de cadena de F# es realmente un tipo de .NET Framework System.String , todos los miembros System.String están disponibles. System.String incluye el operador +, que se usa para concatenar cadenas, la propiedad Length y la propiedad Chars, que devuelve la cadena como una matriz de caracteres Unicode. Para obtener más información sobre las cadenas, consulte System.String.

Mediante el uso de la propiedad Chars de System.String, puede tener acceso a los caracteres individuales de una cadena especificando un índice, como se muestra en el código siguiente.

let printChar (str: string) (index: int) =
    printfn "First character: %c" (str.Chars(index))

Módulo de cadenas

En el módulo String del espacio de nombres FSharp.Core se incluye funcionalidad adicional para el control de cadenas. Para más información, consulte Módulo de cadenas.

Consulte también