Cadeias de caracteres

O tipo string representa texto imutável como uma sequência de caracteres Unicode. string é um alias de System.String no .NET.

Comentários

Literais de cadeia de caracteres são delimitados pelo caractere de aspas ("). O caractere de barra invertida (\) é usado para codificar determinados caracteres especiais. Juntos, a barra invertida e o próximo caractere são conhecidos como uma sequência de escape. As sequências de escape com suporte em literais de cadeia de caracteres F# são mostradas na tabela a seguir.

Caractere Sequência de escape
Alerta \a
Backspace \b
Avanço de formulário \f
Nova linha \n
Retorno de carro \r
Tab \t
Guia vertical \v
Barra invertida \\
Aspas \"
Apóstrofo \'
Caractere unicode \DDD (em que D indica um dígito decimal; intervalo de 000 a 255; por exemplo, \231 = "ç")
Caractere unicode \xHH (em que H indica um dígito decimal; intervalo de 00 a FF; por exemplo, \xE7 = "ç")
Caractere unicode \uHHHH (UTF-16) (em que H indica um dígito hexadecimal; intervalo de 0000 a FFFF; por exemplo, \u00E7 = "ç")
Caractere unicode \U00HHHHHH (UTF-32) (em que H indica um dígito hexadecimal; intervalo de 000000 a 10FFFF; por exemplo, \U0001F47D = "👽")

Importante

A sequência de escape \DDD é notação decimal, não notação octal como na maioria das outras linguagens. Portanto, os dígitos 8 e 9 são válidos, e uma sequência de \032 representa um espaço (U+0020), enquanto o mesmo ponto de código na notação octal seria \040.

Observação

Restritas a um intervalo de 0 a 255 (0xFF), as sequências de escape \DDD e \x são de fato o conjunto de caracteres ISO-8859-1, visto que ele corresponde aos primeiros 256 pontos de código Unicode.

Cadeia de caracteres verbatim

Se precedido pelo símbolo @, o literal é uma cadeia de caracteres verbatim. Declarar uma cadeia de caracteres verbatim significa que todas as sequências de escape são ignoradas, com a exceção de que caracteres de duas aspas são interpretados como um caractere de aspas.

Cadeias de caracteres de aspas triplas

Além disso, uma cadeia de caracteres pode ser colocada entre aspas triplas. Nesse caso, todas as sequências de escape são ignoradas, incluindo caracteres de aspas duplas. Para especificar uma cadeia de caracteres que contém uma cadeia de caracteres entre aspas inserida, você pode usar uma cadeia de caracteres verbatim ou uma cadeia de caracteres com aspas triplas. Se você usar uma cadeia de caracteres verbatim, deverá especificar dois caracteres de aspas para indicar um único caractere de aspas. Se você usar uma cadeia de caracteres com aspas triplas, poderá usar os caracteres de aspas simples sem que eles sejam analisados como o final da cadeia de caracteres. Essa técnica pode ser útil quando você trabalha com XML ou outras estruturas que incluem aspas inseridas.

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

No código, cadeias de caracteres que têm quebras de linha são aceitas, e as quebras de linha são interpretadas como a codificação de uma nova linha usada na fonte, a menos que um caractere de barra invertida seja o último caractere antes da quebra de linha. O espaço em branco à esquerda na linha seguinte é ignorado quando o caractere de barra invertida é usado. O código a seguir produz uma cadeia de caracteres str1 que tem valor "abc\ndef" e uma cadeia de caracteres str2 que tem valor "abcdef".

let str1 =
    "abc
def"

let str2 =
    "abc\
def"

Indexação e divisão de cadeia de caracteres

Você pode acessar caracteres individuais em uma cadeia de caracteres usando a sintaxe semelhante à matriz. Os exemplos a seguir usam [] para indexar cadeias de caracteres. Essa sintaxe foi introduzida no F# 6.0. Você também pode usar .[] para indexar cadeias de caracteres em todas as versões. A nova sintaxe é preferível.

printfn "%c" str1[1]

A saída é b.

Ou você pode extrair substrings usando a sintaxe de fatia de matriz, conforme mostrado no código a seguir.

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

A saída é a seguinte.

abc
def

Você pode representar cadeias de caracteres ASCII por matrizes de bytes sem sinal digitando byte[]. Adicione o sufixo B a um literal de cadeia de caracteres para indicar que ele é uma cadeia de caracteres ASCII. Literais de cadeia de caracteres ASCII usados com matrizes de bytes dão suporte às mesmas sequências de escape que as cadeias de caracteres Unicode, exceto para as sequências 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 da cadeia de caracteres

O operador + pode ser usado para concatenar cadeias de caracteres mantendo a compatibilidade com os recursos de tratamento de cadeia de caracteres do .NET Framework. O exemplo a seguir ilustra a concatenação de cadeias de caracteres.

let string1 = "Hello, " + "world"

Classe de cadeia de caracteres

Como o tipo de cadeia de caracteres em F# é, na verdade, um tipo de .NET Framework System.String, todos os membros System.String estão disponíveis. System.String inclui o operador +, que é usado para concatenar cadeias de caracteres, a propriedade Length e a propriedade Chars, que retorna a cadeia de caracteres como uma matriz de caracteres Unicode. Para obter mais informações sobre cadeias de caracteres, consulte System.String.

Usando a propriedade Chars de System.String, você consegue acessar os caracteres individuais em uma cadeia de caracteres especificando um índice, conforme mostrado no código a seguir.

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

Módulo de cadeia de caracteres

A funcionalidade adicional para tratamento de cadeia de caracteres está incluída no módulo String no namespace FSharp.Core. Para obter mais informações, confira Módulo de cadeia de caracteres.

Confira também