Skip to content

Biblioteca String

A Biblioteca String disponibiliza diversas funções dentro da tabela string. Ela também define uma metatabela __index para as nossas strings que aponta para a tabela string. Dessa forma, podemos acessar as funções da biblioteca diretamente na nossa string.

local hello = "ola %s"
local world = "mundo"
print(hello:format(world))
print(string.format("%s %s", "ola", "mundo"))

A função string.format é uma ferramenta poderosa para formatar strings e converter números em strings. Ela retorna uma cópia do seu primeiro argumento (a “string de formato”), substituindo cada diretiva por uma versão formatada do argumento correspondente.

As diretivas na string de formato seguem regras semelhantes às da função printf em C. Uma diretiva consiste em um sinal de porcentagem (%) seguido de uma letra que indica como formatar o argumento:

  • %d - Inteiro decimal
  • %x - Hexadecimal (minúsculo)
  • %X - Hexadecimal (maiúsculo)
  • %f - Número de ponto flutuante
  • %s - String
  • %q - Formata booleanos, nil, números e strings de uma forma que o resultado é uma constante válida no código fonte Lua. Booleanos e nil são escritos da maneira óbvia (true, false, nil). Números de ponto flutuante são escritos em hexadecimal, para preservar a precisão total.
print(string.format("%d + %d = %d", 1, 1, 1 + 1)) -- 1 + 1 = 2
print(string.format("#%02x%02x%02x", 0, 255, 0)) -- #00ff00
print(string.format("#%02X%02X%02X", 0, 255, 0)) -- #00FF00
print(string.format("%02d/%02d/%04d", 3, 7, 2025))
print(string.format("%f", 100)) -- 100.000000
print(string.format("%.2f", 100)) -- 100.00
print(string.format("km %20.1f", 100)) -- km 100.0
print(string.format("%-20.1f km", 100)) -- 100.0 km
print(string.format("%.3d", 10)) -- 010
print(string.format("%.10f", 10.0)) -- 10.0000000000

A função string.sub é usada para extrair uma parte específica de uma string. Ela recebe três argumentos: a string original, o índice inicial e o índice final. Retorna a parte da string compreendida entre os índices inicial e final.

local mensagem = "Olá, mundo!"
local parte = string.sub(mensagem, 1, 4)
print(parte) -- Olá

Busca uma substring dentro de uma string e retorna as posições inicial e final, ou nil se não encontrada:

local mensagem = "Olá, Lua!"
local inicio, fim = string.find(mensagem, "Lua")
print(inicio, fim) -- 7 9

A função string.upper é usada para converter todos os caracteres de uma string em letras maiúsculas. Enquanto a função string.lower é usada para converter a string palavra em letras minúsculas.

local palavra = "lua"
local palavra_maiuscula = string.upper(palavra)
print(palavra_maiuscula) -- LUA
local palavra_minuscula = string.lower(palavra)
print(palavra_minuscula) -- lua

A função string.reverse é usada para inverter a ordem dos caracteres de uma string.

local palavra = "Lua"
local palavra_invertida = string.reverse(palavra)
print(palavra_invertida) -- auL

A função string.rep permite repetir uma string um determinado número de vezes. Ela recebe dois parâmetros: a string a ser repetida e a quantidade de vezes que ela deve ser repetida.

local original = "Olá!"
local repetido = string.rep(original, 3)
print(repetido) -- Olá!Olá!Olá!

A função string.gmatch é usada para iterar sobre as ocorrências de um padrão em uma string. Ela recebe dois parâmetros: a string a ser analisada e o padrão a ser procurado. Ela retorna uma função iteradora que pode ser usada em um loop for.

local texto = "Lua é uma linguagem de programação"
for palavra in string.gmatch(texto, "[%aéçã]+") do
print(palavra)
end

Substitui todas as ocorrências de um padrão por outra string:

local texto = "Lua é uma linguagem de programação"
local novo_texto = string.gsub(texto, "linguagem", "idioma")
print(novo_texto) -- Lua é uma idioma de programação
print(string.gsub("ola pessoal", "l", "u")) -- oua pessoau 2
print(string.gsub("ola pessoal", "ss", "ç")) -- ola peçoal 1
print(string.gsub("ola pessoal", "a", ".")) -- ol. pesso.l 2

Uma classe de caracteres é usada para representar um conjunto de caracteres. As seguintes combinações são permitidas para descrever uma classe de caracteres:

Elas são amplamente utilizadas em diversas funções da biblioteca de strings do Lua, como string.matchstring.gmatch e string.gsub.

Caractere de Classedescrição
%arepresenta todas as letras.
%crepresenta todos os caracteres de controle.
%drepresenta todos os dígitos.
%lrepresenta todas as letras minúsculas.
%prepresenta todos os caracteres de pontuação.
%srepresenta todos os caracteres de espaço.
%urepresenta todas as letras maiúsculas.
%wrepresenta todos os caracteres alfanuméricos.
%xrepresenta todos os dígitos hexadecimais (0-9, a-f, A-F).
%zrepresenta o caractere com representação 0.
%xrepresenta o próprio caractere x (ex: %., %ç, %õ)
[set]representa a classe que é a união de todos os caracteres no conjunto
[^set]representa o complemento do conjunto, onde o conjunto é interpretado como descrito acima.
local texto = "Olá, mundo!"
local texto_encontrado = string.match(texto, "%a+")
print(texto_encontrado)
local texto = "Ola, mundo!"
for texto_encontrado in string.gmatch(texto, "[Oauo]") do
print(texto_encontrado)
end
local texto = "Ola, mundo!"
for texto_encontrado in string.gmatch(texto, "[^Oauo]") do
print(texto_encontrado)
end