No início deste tutorial aprendemos o básico sobre strings e como declarar nossas variáveis utilizando esse tipo de dado. Nesta seção vamos aprender operações básicas sobre strings.

O básico sobre strings foi visto em Tipos de Dados e Variáveis.

Vamos relembrar o básico sobre strings que já estudamos anteriormente. No exemplo abaixo vamos resumir o que foi aprendido com a declaração de variáveis.

Exemplo 1
local str1 = 'uma string'
local str2 = "uma string"
local str3 = [[uma string]]
Saída
-

A concatenação de string em Lua pode ser feita utilizando o operador de concatenação (..) entre duas strings.

Exemplo 2
local str1 = "string"
local str2 = "qualquer"
local str3

str3 = str1.." "..str2

print(str3)
Saída
string qualquer

Para percorrermos o conteúdo de uma string, podemos utilizar a função sub passando como argumento o índice ou posição do caractere que desejamos recuperar.

Sintaxe
minha_string:sub(ind_ini,ind_fim)
Onde
ind_ini: indice inicial para recuperarmos o conteúdo
ind_fim: indice final para recuperarmos o conteúdo
Retorno
caractere de minha_string em ind_ini e ind_fim em forma de string
Exemplo 3
local minha_string = "string"
local x

for x=0,#minha_string,1 do
 --manipulação de caractere aqui
 print(minha_string:sub(x,x))
end
Saída
s
t
r
i
n
g

Caso seja necessário exibir os valores numéricos dos caracteres de uma string utilizamos a função byte:

Sintaxe
minha_string:byte(indice)
Onde
indice: índice do caractere dentro da string
Retorno
caractere de minha_string em ind_ini e ind_fim em forma de byte
Exemplo 3
local minha_string = "string"
local x

for x=0,#minha_string,1 do
 print(minha_string:byte(x))
end
Saída
115
116
114
105
110
103

Para transformarmos nossas string para caixa alta ou caixa baixa, utilizamos as funções upper e lower. A primeira diz respeito a caixa alta, a segunda, caixa baixa.

Sintaxe
string.upper(s) --alta
string.lower(s) --baixa
Onde
s: string que desejamos converter/transformar
Retorno
string s convertida para maiúscula/minúscula
Exemplo 4
local str1 = "string"
local str2 = "QUALQUER"

print(string.upper(str1),string.lower(str2))
Saída
STRING	qualquer

Para convertermos um caractere contido em uma string para byte, utilizamos a função byte que recebem como argumento uma string e o índice da caracter que desejamos converter.

Sintaxe
string.byte(s, indice)
Onde
s: string que desejamos manipular
indice: índice do caractere que desejamos converter
Exemplo 5
print(string.byte("Lua",1))
print(string.byte("Lua",2))
Saída
76 -- L
117 -- u

É importante lembrar que tipos de dados com valores justapostos não são baseados em índice 0. O acesso ao primeiro elemento é sempre feito na posição ou índice 1.

Caso nossos strings em Lua possuam algum tipos de padrão e que haja a necessidade de substituição, podemos utilizar a função gsub:

Sintaxe
string.gsub(s, pattern , repl)
Onde
s: string origem para substituição
pattern: parte da string para ser substituída
repl: string para substituição.
Retorno
string contendo pattern substituída por repl em s
Exemplo 6
local _string = "10;;20;;30;;40"
local str_final = string.gsub(_string,";;","|")
print(str_final)
Saída
10|20|30|40

Caso exista a necessidade de nossas string em Lua serem manipuladas de forma reversa, podemos utilizar a função reverse.

Sintaxe
string.reverse(s)
Onde
s: string que desejamos inverter ordem
Retorno
string s com caracteres em ordem invertida
Exemplo 7
local _string = "um string qualquer"
print("Antes:", _string)
local _string = string.reverse(_string)
print("Depois", _string)
Saída
antes:	uma string qualquer
depois:	reuqlauq gnirts amu

Em muitas situações precisamos encontrar a posição de uma caractere, símbolo ou padrão em nossas strings em Lua. Nessas situações, utilizamos a função find:

Sintaxe
string.find(s, pattern [, init [, plain]])
Onde
s: string onde desejamos buscar um pattern
pattern: caracter ou string que desejamos buscar em s
Retorno
Valor numérico que representa o índice onde pattern foi encontrado em s.
Exemplo 8
local _string = "uma string  com X qualquer"
local indice = string.find(_string,"X")
print("índice:",indice)
Saída
índice:	17

Se em algum momento for necessário replicar uma string, podemos utilizar a função rep que aceita como argumentos uma string e o número de vezes que desejamos replicar essa string.

Sintaxe
string.rep(s, n [,j])
Onde
s: string que desejamos replicar
n: número de vezes que desejamos replicar s
Retorno
string replicada n vezes
Exemplo 9
local padrao = "AB"
local repeticao = string.rep(padrao,3)
print(repeticao)
Saída
ABABAB

Quando estudamos operadores, nos deparamos com operador #, que quando colocado à frente de uma string, retorna o tamanho sua tamanho. Além desse operador, podemos utilizar a função len que faz a mesma tarefa do operador #.

Sintaxe
string.len(s)
Onde
s: string que desejamos saber o tamanho
Retorno
string s com caracteres em ordem invertida
Exemplo 10
local cheat = "ABACABB"
local tamanho = string.len(cheat)
print("tamanho:",tamanho)
Saída
tamanho:	7

Em momentos que precisamos buscar por padrões em nossas strings, utilizamos a função match. Essa função recebe uma string e o padrão que desejamos pesquisar.

Sintaxe
string.match(s,pattern,[,init])
Onde
s: string onde desejamos procurar uma padrão
pattern: padrão que desejamos procurar.
Alguns patterns aceitos
  1. . : representa todos caracteres
  2. %a: letras
  3. %d: dígitos
  4. %g: caracteres imprimíveis, menos espaço
  5. %l: letras em caixa baixa
  6. %p: caracteres de pontuação
  7. %s: caracteres de espaço
  8. %u: letras em caixa alta
  9. %w: caracteres alfanuméricos
  10. %x: caracteres hexadecimais
  11. []: grupo de valores
  12. * : zero ou mais ocorrências
  13. + : uma ou mais ocorrências
  14. ? : zero ou uma ocorrência
Retorno
string contendo pattern encontrado em s
Exemplo 11
local sequencia = "0123ABCDghij"

print(string.match(sequencia,"%d+")) -- apenas dígitos
print(string.match(sequencia,"%u+")) -- apenas letras caixa alta
print(string.match(sequencia,"%x+")) -- apenas hexadecimais
print(string.match(sequencia,"%l+")) -- apenas letras caixa baixa
Saída
0123
ABCD
0123ABCD
ghij

A comparação de strings em Lua pode ser feita utilizando os operadores de comparação (==, !=). Para auxiliar, as funções tower e toupper podem ser utilizadas.

Exemplo 12
str1 = "string"
str2 = "string"
str3 = "String"

print(str1 == str2)
print(str1 == str3)
print(string.lower(str1) == string.lower(str3))
Saída
true
false
true

A verificação de string vazia pode ser feita utilizando if not ou a função string.len que retorna a quantidade de caracteres de uma string:

Exemplo 13
local minha_string = "str";

if string.len(minha_string) == 0 then
   print(minha_string,"vazia")
else
   print(minha_string,"cheia")
end
Saída
str	cheia
Exemplo 14
local str2
if not str2 then
   print(str2,"vazia")
else
   print(str2,"cheia")
end
Saída
nil	vazia

Usando o operador (==) e nil, podemos verificar se uma string é nula como mostrado no exemplo abaixo:

Exemplo 15
local str3 = nil
if str3 == nil then
   print(str3,"nula")
else
   print(str3,"não nula")
end
Saída
nil	nula
  1. 10/06/2025 - revisão 3 - Adição de 'comparando strings'
  2. 12/09/2024 - revisão 2 - Pequenos ajustes gramaticais
  3. 03/10/2023 - revisão 1 - Correção em referências e erros gramaticais
  4. 28/04/2023 - versão inicial