strings

Utilitários de texto para fatiar, dividir, juntar, converter caixa e buscar.

import strings

Lembre-se: em Bern uma string é uma lista de caracteres, então os operadores de lista também valem para strings - "ab" <> "cd" é "abcd", e "hello"[0] é 'h'. A biblioteca strings adiciona as operações de texto de nível mais alto.

Extração

substring(string, início, fim) → string

O trecho do índice início até (sem incluir) fim.

substring("Hello", 1, 4)
-- Saída: "ell"
char_at(string, índice) → char

O caractere em índice (o mesmo que indexar com []).

char_at("Bern", 0)
-- Saída: 'B'

Dividir & juntar

split(string, delimitador) → lista

Quebra uma string em uma lista de partes a cada ocorrência de delimitador.

split("a,b,c", ",")
-- Saída: ["a", "b", "c"]
join(lista, delimitador) → string

O inverso de split: cola uma lista de strings com um separador.

join(["a", "b", "c"], "-")
-- Saída: "a-b-c"

Conversão de caixa

to_upper(string) → string

Maiúscula em cada letra.

to_upper("bern")
-- Saída: "BERN"
to_lower(string) → string

Minúscula em cada letra.

to_lower("BERN")
-- Saída: "bern"
char_to_upper(char) → char

Maiúscula em um único caractere (não-letras passam inalteradas).

char_to_upper('a')
-- Saída: 'A'
char_to_lower(char) → char

Minúscula em um único caractere.

char_to_lower('Z')
-- Saída: 'z'

Modificação

trim(string) → string

Remove espaços, quebras de linha e tabs no início e no fim.

trim("  hello  ")
-- Saída: "hello"
replace(string, antigo, novo) → string

Substitui toda ocorrência de antigo por novo.

replace("hello world", "world", "Bern")
-- Saída: "hello Bern"

Números

from_int(int) → string

Renderiza um inteiro como string (trata negativos). O par do to_int do core.

from_int(-42)
-- Saída: "-42"
"v" + from_int(2)
-- Saída: "v2"

Juntando tudo

As funções encadeiam bem para limpar e remodelar texto. Aqui uma linha estilo CSV bagunçada é dividida, aparada, normalizada e re-unida:

Normalizando uma linha de tags

import core
import strings

line = "  Bern , Lang ,DOCS  "

tags = split(line, ",")
    )| map(\t -> to_lower(trim(t)))

clean = join(tags, ", ")
-- Saída: "bern, lang, docs"

E um pequeno "slugify" que combina to_lower, replace e trim:

Construindo um slug de URL

import strings

def slugify(title) do
    lower = to_lower(trim(title))
    return replace(lower, " ", "-")
end

slugify("  Getting Started With Bern ")
-- Saída: "getting-started-with-bern"