Conceptos básicos de strings: concatenación y longitud
Utilice .. para concatenar, # para obtener la longitud y string.rep/reverse.
Conceptos básicos de strings: concatenación y longitud es una lección gratuita de Lua Academy en CoddyKit. Esta es la lección 1 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Lua Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Lua Academy incluye 4 lecciones en total.
Concatenación de cadenas con ..
Lua utiliza .. (dos puntos) para concatenar cadenas. Funciona con cadenas y números (los números se convierten automáticamente). A diferencia de + en muchos lenguajes, + en Lua solo realiza operaciones aritméticas; usar + con cadenas provoca un error.
local first = "Hello"
local second = "World"
print(first .. ", " .. second .. "!") -- Hello, World!
-- Numbers auto-converted
local age = 30
print("Age: " .. age) -- Age: 30
-- Bad: print("x" + "y") ERROR: arithmetic on stringOperador de longitud #
El operador # devuelve la longitud en bytes de una cadena. En las cadenas ASCII, coincide con el número de caracteres. En las cadenas UTF-8 multibyte, # cuenta bytes, no caracteres; un emoji UTF-8 cuenta como 4. Use una biblioteca UTF-8 para obtener longitudes precisas en caracteres.
print(#"hello") -- 5
print(#"") -- 0
print(#"café") -- 5 (c,a,f,é=2bytes)
local s = "Lua"
for i = 1, #s do
io.write(string.byte(s, i) .. " ")
end
print() -- 76 117 97string.rep y string.reverse
string.rep(s, n, sep) repite la cadena s exactamente n veces, con un separador opcional. string.reverse(s) invierte el orden de los bytes de la cadena. Ambas funciones devuelven cadenas nuevas; las cadenas de Lua son inmutables.
print(string.rep("ab", 3)) -- ababab
print(string.rep("ha", 3, "-")) -- ha-ha-ha
print(string.rep("x", 0)) -- (empty)
print(string.reverse("hello")) -- olleh
print(string.reverse("12345")) -- 54321string.upper y string.lower
string.upper(s) y string.lower(s) convierten los caracteres ASCII. No gestionan Unicode; los caracteres no ASCII se mantienen sin cambios. Para comparar sin distinguir mayúsculas de minúsculas, convierta ambas cadenas a minúsculas antes de compararlas.
print(string.upper("hello")) -- HELLO
print(string.lower("WORLD")) -- world
print(string.upper("Lua 5.4!")) -- LUA 5.4!
-- Case-insensitive comparison
local a = "Hello"
local b = "hello"
print(a:lower() == b:lower()) -- trueSintaxis de métodos con dos puntos
Las funciones de cadenas pueden llamarse mediante la sintaxis de dos puntos sobre valores de tipo cadena: s:upper() en lugar de string.upper(s). Esto funciona porque las cadenas tienen una metatabla con __index = string, por lo que todas las funciones de la biblioteca de cadenas están disponibles como métodos en cualquier cadena.
local s = " hello world "
print(s:upper()) -- HELLO WORLD
print(s:len()) -- 15
print(s:rep(2, "|")) -- same as string.rep(s,2,"|")
-- Chain calls
print(("lua"):upper():reverse()) -- AULInmutabilidad de las cadenas
Las cadenas de Lua son inmutables. No puede modificar sus caracteres directamente. Cada operación con cadenas crea una cadena nueva. Para realizar muchas concatenaciones dentro de bucles, use una tabla para acumular las partes y table.concat al final; es mucho más eficiente que repetir ...
-- Efficient string building
local parts = {}
for i = 1, 5 do
parts[i] = "item" .. i
end
local result = table.concat(parts, ", ")
print(result) -- item1, item2, item3, item4, item5
-- Slow! Creates 5 intermediate strings:
-- local s = ""
-- for i = 1, 5 do s = s .. "item" .. i endtable.concat para unir elementos
table.concat(t, sep, i, j) une elementos de una matriz en una cadena usando un separador. Solo funciona con valores de tipo cadena y número; las tablas o los booleanos provocan un error. Es la forma más rápida de construir cadenas a partir de muchas partes.
local parts = {"one", "two", "three", "four"}
print(table.concat(parts, ", ")) -- one, two, three, four
print(table.concat(parts, " | ", 2, 3)) -- two | three
-- Building CSV
local row = {1, "Alice", 95, true}
-- Need tostring for non-string values:
for i, v in ipairs(row) do row[i] = tostring(v) end
print(table.concat(row, ","))Comparación de cadenas
Las cadenas se comparan lexicográficamente según el valor de sus bytes. En ASCII, las letras mayúsculas aparecen antes que las minúsculas (A=65, a=97), por lo que "Z" < "a" es verdadero. Use string.lower en ambos lados para ordenar sin distinguir mayúsculas de minúsculas.
print("abc" < "abd") -- true
print("abc" < "abcd") -- true (shorter)
print("Z" < "a") -- true (Z=90, a=97)
print("10" < "9") -- true (lexicographic!)
print(10 < 9) -- false (numeric)
-- Sort strings case-insensitively
local words = {"Banana","apple","Cherry"}
table.sort(words, function(a,b) return a:lower()<b:lower() end)
print(table.concat(words,", "))tostring y tonumber
tostring(v) convierte cualquier valor en su representación de cadena. tonumber(s, base) analiza una cadena y la convierte en un número. tonumber devuelve nil si el análisis falla, a diferencia de muchos lenguajes que lanzan una excepción. La base puede ser de 2 a 36 para analizar enteros.
print(tostring(42)) -- 42
print(tostring(true)) -- true
print(tostring(nil)) -- nil
print(tostring({1,2})) -- table: 0x...
print(tonumber("3.14")) -- 3.14
print(tonumber("0xff")) -- 255 (hex)
print(tonumber("11",2)) -- 3 (binary)
print(tonumber("abc")) -- nil (invalid)Internación de cadenas
Lua interna las cadenas cortas: las cadenas con contenido idéntico comparten el mismo objeto en memoria. Esto hace que == aplicado a cadenas sea, en la práctica, una comparación de punteros después de comprobar el hash, lo que resulta muy rápido. La internación también implica un pequeño coste adicional al crear una cadena (el cálculo del hash), pero las cadenas repetidas no tienen coste adicional.
local s1 = "hello"
local s2 = "hel" .. "lo"
-- Same content, interned to same object
print(s1 == s2) -- true
print(#s1) -- 5
-- Long strings may not be interned
-- They are still compared correctly by value
local long1 = string.rep("x", 1000)
local long2 = string.rep("x", 1000)
print(long1 == long2) -- trueComprobación rápida
¿Cuál es la forma más eficiente de construir una cadena larga a partir de muchas partes pequeñas en Lua?
Repaso: conceptos básicos de las cadenas
Puntos clave:
..concatena; nunca use+con cadenas#scuenta bytes (no caracteres Unicode)s:upper(),s:lower(),s:rep(n, sep),s:reverse()- Las cadenas son inmutables: cada operación devuelve una cadena nueva
- Construya cadenas grandes con una tabla y
table.concat tostring/tonumberpara conversiones de tipo
Preguntas frecuentes
¿La lección «Conceptos básicos de strings: concatenación y longitud» es gratis?
Sí — el texto completo de «Conceptos básicos de strings: concatenación y longitud» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Lua Academy, actualiza a CoddyKit PRO. El curso de Lua Academy incluye 4 lecciones en total.
¿Qué aprenderé en «Conceptos básicos de strings: concatenación y longitud»?
Utilice .. para concatenar, # para obtener la longitud y string.rep/reverse. Practicas Lua Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.
¿Necesito experiencia previa para empezar Lua Academy?
No se requiere experiencia previa. Lua Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 1 de 4.
¿Cuánto tiempo toma la lección «Conceptos básicos de strings: concatenación y longitud»?
La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.
¿Puedo escribir y ejecutar código en esta lección de Lua Academy?
Sí. Cada lección de Lua Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.
Todas las lecciones de este curso
- Conceptos básicos de strings: concatenación y longitud
- Búsqueda y extracción de substrings
- string.format para la salida
- string.gsub y string.gmatch