00
:
00
:
00
:
00
Corso SEO AI - Usa SEOEMAIL al checkout per il 30% di sconto

Stringhe in Lua

Le stringhe in Lua sono sequenze immutabili di byte utilizzate per rappresentare testo. Lua offre una ricca libreria di funzioni per la loro manipolazione. In questa guida esploreremo la creazione, le sequenze di escape e le principali funzioni della libreria string.

Creazione di Stringhe

Lua offre tre modi per creare stringhe: apici singoli, apici doppi e long strings con [[ ]]:

local saluto = 'Ciao, mondo!'
local messaggio = "Benvenuto in Lua"
local testo_lungo = [[
Questo testo si estende su
piu righe senza sequenze di escape.
]]

Le long strings supportano anche livelli con = per evitare conflitti: [=[ testo con ]] ]=].

Sequenze di Escape

Le stringhe tra apici supportano sequenze di escape come \n (nuova riga), \t (tabulazione), \\ (backslash), \" e \' (apici), \97 (codice decimale) e \x41 (codice esadecimale):

print("Prima riga\nSeconda riga")
print("Colonna1\tColonna2")
print("Disse: \"Ciao!\"")

Concatenazione e Lunghezza

Le stringhe si concatenano con .. e la lunghezza si ottiene con # o string.len:

local nome_completo = "Mario" .. " " .. "Rossi"
print(#nome_completo)              -- 11
print("Ho " .. 30 .. " anni")     -- conversione automatica dei numeri

Maiuscole, Minuscole e Inversione

local frase = "Ciao Mondo"
print(string.upper(frase))    -- CIAO MONDO
print(string.lower(frase))    -- ciao mondo
print(frase:upper())          -- sintassi alternativa con i due punti
print(string.reverse("Lua"))  -- auL

Sottostringhe con string.sub

Estrae porzioni di stringa. Gli indici partono da 1; quelli negativi contano dalla fine:

local testo = "Programmazione Lua"
print(string.sub(testo, 1, 15))  -- Programmazione
print(string.sub(testo, -3))     -- Lua
print(testo:sub(1, 1))           -- P (primo carattere)

Ripetizione con string.rep

print(string.rep("Lua ", 3))        -- Lua Lua Lua
print(string.rep("-", 20))           -- --------------------
print(string.rep("ab", 3, ", "))    -- ab, ab, ab

Ricerca con string.find

Cerca un pattern e restituisce le posizioni di inizio e fine della corrispondenza:

local frase = "Ciao mondo, benvenuto in Lua"
local inizio, fine = string.find(frase, "mondo")
print(inizio, fine)  -- 6  10
print(string.find(frase, "Python"))  -- nil
-- Ricerca letterale (senza pattern) con quarto parametro true
print(string.find("100%", "%%", 1, true))  -- 4

Sostituzione con string.gsub

Sostituisce le occorrenze di un pattern. Restituisce la nuova stringa e il conteggio:

local testo = "Lua e bello. Lua e potente."
print(string.gsub(testo, "Lua", "Python"))
-- Python e bello. Python e potente.    2

local nuovo, n = string.gsub(testo, "Lua", "Python", 1)
print(nuovo)  -- Python e bello. Lua e potente.
print(n)      -- 1

Formattazione con string.format

Crea stringhe formattate con specificatori %s (stringa), %d (intero), %f (decimale), %x (esadecimale):

print(string.format("Nome: %s, Eta: %d", "Lucia", 25))
print(string.format("Prezzo: %.2f EUR", 19.99))
print(string.format("Hex: %x", 255))           -- ff
print(string.format("|%-15s|%5d|", "Articolo", 42))

Conversione tra Byte e Caratteri

Le funzioni string.byte e string.char convertono tra caratteri e codici numerici:

print(string.byte("A"))              -- 65
print(string.byte("ABC", 1, 3))     -- 65  66  67
print(string.char(76, 117, 97))     -- Lua

Conversione tra Stringhe e Numeri

local str = tostring(42)        -- "42"
local num = tonumber("3.14")    -- 3.14
print(tonumber("abc"))           -- nil (conversione fallita)
print(tonumber("FF", 16))       -- 255 (base esadecimale)
print("10" + 5)                  -- 15 (conversione automatica)
print("10" .. 5)                 -- 105 (concatenazione)

Conclusioni

La libreria string di Lua offre funzioni complete per la manipolazione del testo. La sintassi con i due punti (str:upper()) rende il codice leggibile, e la conversione automatica tra stringhe e numeri semplifica le operazioni comuni. Ricorda che le stringhe sono immutabili: ogni operazione crea una nuova stringa.