متدهای رشته‌ای در لوا

متدهای کتابخانه string: upper، lower، rep، reverse، find، sub و جایگزینی

کتابخانه string

لوا یک کتابخانه کامل از توابع کار با رشته دارد. جالب است بدانید رشته‌ها در لوا «متا‌جدول» دارند که به آن‌ها اجازه می‌دهد مثل شیء رفتار کنند:

-- دو روش معادل برای صدا زدن:
    string.upper("lua")   -- روش ۱: از روی کتابخانه
    ("lua"):upper()       -- روش ۲: متد روی خود رشته!

متدهای پرکاربرد

متدکارمثال
upper(s)حروف بزرگ("lua"):upper() → LUA
lower(s)حروف کوچک("LUA"):lower() → lua
len(s)طول("lua"):len() → 3
rep(s, n)تکرار("ab"):rep(3) → ababab
reverse(s)برعکس("lua"):reverse() → aul
sub(s, i, j)برش("hello"):sub(2, 3) → el
byte(s, i)کد کاراکتر("A"):byte() → 65
char(n)کاراکتر از کدstring.char(65) → A

جستجو با find

local s = "برنامه‌نویسی با لوا"
    
    local start, finish = string.find(s, "لوا")
    print(start, finish)   -- موقعیت شروع و پایان
    
    if string.find(s, "با") then
      print("پیدا شد!")
    end

جایگزینی با gsub

gsub (جایگزینی سراسری) یکی از قدرتمندترین توابع لواست:

local s = "من لوا را دوست دارم. لوا عالی است!"
    
    -- جایگزینی همه موارد
    local result = string.gsub(s, "لوا", "Lua")
    print(result)   -- من Lua را دوست دارم. Lua عالی است!
    
    -- شمارش تعداد جایگزینی
    local result2, count = string.gsub(s, "لوا", "Lua")
    print("تعداد:", count)   -- 2
    
    -- محدود کردن تعداد جایگزینی
    local result3 = string.gsub(s, "لوا", "Lua", 1)
    print(result3)   -- فقط اولی جایگزین شد

مقایسه رشته‌ها

print("abc" == "abc")    -- true
    print("abc" == "ABC")    -- false (حساس به حروف)
    
    -- مقایسه الفبایی (بر اساس کد کاراکترها)
    print("apple" < "banana")   -- true
    print("ABC" < "abc")        -- true (حروف بزرگ کوچک‌ترند!)

بررسی شروع و پایان رشته

لوا توابع startsWith/endsWith ندارد، اما می‌توان ساخت:

local function startsWith(s, prefix)
      return s:sub(1, #prefix) == prefix
    end
    
    local function endsWith(s, suffix)
      return suffix == "" or s:sub(-#suffix) == suffix
    end
    
    print(startsWith("hello.lua", "hello"))   -- true
    print(endsWith("hello.lua", ".lua"))      -- true

جداسازی رشته (Split)

لوا تابع split ندارد! اما با gmatch می‌توان ساخت:

local function split(s, delimiter)
      local result = {}
      for match in string.gmatch(s, "[^" .. delimiter .. "]+") do
        table.insert(result, match)
      end
      return result
    end
    
    local parts = split("یک,دو,سه", ",")
    for i, p in ipairs(parts) do
      print(i, p)
    end

این مبحث بخشی از دوره آموزش کامل لوا است.

ابزارهای مرتبط