Строки и операции над ними
Осваиваем работу с текстом — от простых кавычек до поиска и замены.
Строка — это последовательность символов, текст: имя игрока, сообщение в чате, путь к файлу.
Текст встречается повсюду: ник игрока, реплики персонажей, ключи в конфигах. Lua даёт богатый набор инструментов для работы со строками.
Три способа записать строку
local a = "двойные кавычки"
local b = 'одинарные кавычки'
local c = [[длинная строка,
может занимать несколько строк]]
print(c)Вывод:
длинная строка, может занимать несколько строк
Двойные квадратные скобки [[ ]] удобны для многострочного текста — например, для целого письма или фрагмента конфига.
Длина строки
Оператор # возвращает длину строки в байтах:
local word = "Roblox"
print(#word)Вывод:
6
Библиотека string
Самые полезные функции живут в модуле string:
local s = "Hello, Lua"
print(string.upper(s)) -- в верхний регистр
print(string.sub(s, 1, 5)) -- подстрока: символы с 1 по 5
print(string.len(s)) -- длинаВывод:
HELLO, LUA Hello 10
В Lua символы нумеруются с единицы, а не с нуля — это важное отличие от многих языков!
Поиск и замена
local text = "score=100"
print(string.find(text, "=")) -- позиция знака равно
print(string.gsub(text, "100", "200")) -- заменаВывод:
6 6 score=200 1
gsub возвращает не только новую строку, но и число выполненных замен.
Двоеточие как удобство
Вместо string.upper(s) можно писать s:upper() — это то же самое, но короче. Двоеточие подставляет саму строку первым аргументом.
Как работает под капотом
Строки в Lua неизменяемы: любая операция вроде upper не меняет исходную строку, а создаёт новую. Более того, Lua хранит одинаковые строки в единственном экземпляре (интернирование) — поэтому сравнение строк через == очень быстрое.
Частые ошибки
- Считать символы с нуля. В Lua
string.sub(s, 1, 1)— это первый символ. - Думать, что
#считает символы. Для ASCII так и есть, но для кириллицы в UTF-8 он считает байты. - Ожидать, что
upperизменит исходную строку. Строки неизменяемы — берите возвращённое значение.
Итог
- Строки записываются в одинарных, двойных кавычках или
[[ ]]для многострочного текста. - Оператор
#даёт длину; нумерация символов начинается с единицы. - Модуль
stringсодержитupper,sub,find,gsubи многое другое. - Строки неизменяемы — операции возвращают новые строки.