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.