Elixir - Strings

Strings em Elixir são inseridas entre aspas duplas e são codificadas em UTF-8. Ao contrário de C e C ++, onde as strings padrão são codificadas em ASCII e apenas 256 caracteres diferentes são possíveis, o UTF-8 consiste em 1.112.064 pontos de código. Isso significa que a codificação UTF-8 consiste em muitos caracteres diferentes possíveis. Como as strings usam utf-8, também podemos usar símbolos como: ö, ł, etc.

Crie uma string

Para criar uma variável de string, basta atribuir uma string a uma variável -

str = "Hello world"

Para imprimir isso em seu console, basta ligar para o IO.puts função e passe a variável str -

str = str = "Hello world" 
IO.puts(str)

O programa acima gera o seguinte resultado -

Hello World

Strings vazias

Você pode criar uma string vazia usando o literal de string, "". Por exemplo,

a = ""
if String.length(a) === 0 do
   IO.puts("a is an empty string")
end

O programa acima gera o seguinte resultado.

a is an empty string

Interpolação de String

A interpolação de string é uma maneira de construir um novo valor de String a partir de uma mistura de constantes, variáveis, literais e expressões, incluindo seus valores dentro de um literal de string. Elixir suporta interpolação de string, para usar uma variável em uma string, ao escrevê-la, envolva-a com chaves e preceda as chaves com um'#' placa.

Por exemplo,

x = "Apocalypse" 
y = "X-men #{x}"
IO.puts(y)

Isso pegará o valor de x e o substituirá em y. O código acima irá gerar o seguinte resultado -

X-men Apocalypse

String Concatenation

Já vimos o uso da concatenação de String em capítulos anteriores. O operador '<>' é usado para concatenar strings no Elixir. Para concatenar 2 strings,

x = "Dark"
y = "Knight"
z = x <> " " <> y
IO.puts(z)

O código acima gera o seguinte resultado -

Dark Knight

Comprimento da corda

Para obter o comprimento da corda, usamos o String.lengthfunção. Passe a string como parâmetro e ela mostrará seu tamanho. Por exemplo,

IO.puts(String.length("Hello"))

Ao executar o programa acima, ele produz o seguinte resultado -

5

Invertendo uma corda

Para reverter uma string, passe-a para a função String.reverse. Por exemplo,

IO.puts(String.reverse("Elixir"))

O programa acima gera o seguinte resultado -

rixilE

Comparação de cordas

Para comparar 2 strings, podemos usar os operadores == ou ===. Por exemplo,

var_1 = "Hello world"
var_2 = "Hello Elixir"
if var_1 === var_2 do
   IO.puts("#{var_1} and #{var_2} are the same")
else
   IO.puts("#{var_1} and #{var_2} are not the same")
end

O programa acima gera o seguinte resultado -

Hello world and Hello elixir are not the same.

String Matching

Já vimos o uso do operador = ~ string match. Para verificar se uma string corresponde a um regex, também podemos usar o operador string match ou String.match? função. Por exemplo,

IO.puts(String.match?("foo", ~r/foo/))
IO.puts(String.match?("bar", ~r/foo/))

O programa acima gera o seguinte resultado -

true 
false

O mesmo também pode ser obtido usando o operador = ~. Por exemplo,

IO.puts("foo" =~ ~r/foo/)

O programa acima gera o seguinte resultado -

true

Funções de String

Elixir suporta um grande número de funções relacionadas a strings, algumas das mais usadas estão listadas na tabela a seguir.

Sr. Não. Função e sua finalidade
1

at(string, position)

Retorna o grafema na posição da string utf8 fornecida. Se a posição for maior do que o comprimento da string, ela retornará nil

2

capitalize(string)

Converte o primeiro caractere de uma determinada string em maiúsculas e o restante em minúsculas

3

contains?(string, contents)

Verifica se a string contém algum dos conteúdos fornecidos

4

downcase(string)

Converte todos os caracteres na string dada em minúsculas

5

ends_with?(string, suffixes)

Retorna verdadeiro se a string termina com qualquer um dos sufixos fornecidos

6

first(string)

Retorna o primeiro grafema de uma string utf8, nulo se a string estiver vazia

7

last(string)

Retorna o último grafema de uma string utf8, nulo se a string estiver vazia

8

replace(subject, pattern, replacement, options \\ [])

Retorna uma nova string criada pela substituição de ocorrências de padrão no assunto com substituição

9

slice(string, start, len)

Retorna uma substring começando no início do deslocamento e de comprimento len

10

split(string)

Divide uma string em substrings em cada ocorrência de espaço em branco Unicode com espaços em branco à esquerda e à direita ignorados. Grupos de espaços em branco são tratados como uma única ocorrência. As divisões não ocorrem em espaços em branco ininterruptos

11

upcase(string)

Converte todos os caracteres na string dada em maiúsculas

Binários

Um binário é apenas uma sequência de bytes. Binários são definidos usando<< >>. Por exemplo:

<< 0, 1, 2, 3 >>

Claro, esses bytes podem ser organizados de qualquer forma, mesmo em uma sequência que não os torne uma string válida. Por exemplo,

<< 239, 191, 191 >>

Strings também são binários. E o operador de concatenação de string<> é na verdade um operador de concatenação binária:

IO.puts(<< 0, 1 >> <> << 2, 3 >>)

O código acima gera o seguinte resultado -

<< 0, 1, 2, 3 >>

Observe o caractere ł. Como é codificado em utf-8, essa representação de caractere ocupa 2 bytes.

Uma vez que cada número representado em um binário é um byte, quando esse valor sobe de 255, ele é truncado. Para evitar isso, usamos o modificador de tamanho para especificar quantos bits queremos que esse número tome. Por exemplo -

IO.puts(<< 256 >>) # truncated, it'll print << 0 >>
IO.puts(<< 256 :: size(16) >>) #Takes 16 bits/2 bytes, will print << 1, 0 >>

O programa acima irá gerar o seguinte resultado -

<< 0 >>
<< 1, 0 >>

Também podemos usar o modificador utf8, se um caractere for um ponto de código, ele será produzido na saída; senão os bytes -

IO.puts(<< 256 :: utf8 >>)

O programa acima gera o seguinte resultado -

Ā

Também temos uma função chamada is_binaryque verifica se uma determinada variável é binária. Observe que apenas as variáveis ​​armazenadas como múltiplos de 8 bits são binárias.

Bitstrings

Se definirmos um binário usando o modificador de tamanho e passarmos a ele um valor que não seja um múltiplo de 8, terminaremos com um bitstring em vez de um binário. Por exemplo,

bs = << 1 :: size(1) >>
IO.puts(bs)
IO.puts(is_binary(bs))
IO.puts(is_bitstring(bs))

O programa acima gera o seguinte resultado -

<< 1::size(1) >>
false
true

Isso significa que a variável bsnão é um binário, mas sim um bitstring. Também podemos dizer que um binário é um bitstring em que o número de bits é divisível por 8. A correspondência de padrões funciona em binários e também em bitstrings da mesma maneira.