Lua 基础 03 常用函数

Lua 基础相关知识 第三期

字符串

格式化字符串 string.format

通常字符串的连接可以使用 .. 符号,不过当字符串比较长,这样的连接方式就很繁琐,这时可以使用 string.format 进行格式化。

常用的格式控制符:

  • %s 接收一个字符串
  • %d 接收一个数字并转化为有符号整数,%02d 可以显示两位数,个位数时前面补 0,通常用于倒计时格式
  • %f 接收一个数字并转化为浮点数,默认保留 6 位小数,后面补 0,%.2f 可以保留两位小数
lua 复制代码
local str = "hello"
local result = string.format("str = %s", str)
print(result)

-- str = hello

local minute = 2
local second = 30
local result = string.format("%02d:%02d", minute, second)
print(result)

-- 02:30

local multi = 0.214
local result = string.format("%.2f", multi)
print(result)

-- 0.21

字符串长度 string.len

通常只包含英文的字符串,可以使用 string.len 计算字符串长度。

lua 复制代码
local str = "hello"
print(string.len(str))  -- 5

如果字符串包含中文,那么就需要使用 utf8.len 计算 ASCII 字符。

可以看到,string.len 把小明的长度计算为 6,utf8.len 则是 2。空格的长度为 1。

lua 复制代码
local str = "hello 小明"
print(string.len(str))  -- 12
print(utf8.len(str))    -- 8

字符串查找 string.find

在一个字符串中查找指定的子串内容,如果找到第一个匹配的子串(后续的不查找),则返回这个子串的开始位置和结束位置,否则返回 nil。

lua 复制代码
local str = "hello lua"
local startPos, endPos = string.find(str, "lua")
print(startPos, endPos)

-- 7       9

如果要倒着查找,可以在第三个参数位置指定倒数多少个字符。

例如,倒数一个字符,因为要查找的 lua 是三个字符,只查找一个字符肯定是不匹配的。如果倒数三个字符,就正好能匹配。

lua 复制代码
local str = "hello lua"
local startPos, endPos = string.find(str, "lua", -1)
print(startPos, endPos)

-- nil     nil

local str = "hello lua"
local startPos, endPos = string.find(str, "lua", -3)
print(startPos, endPos)

-- 7       9

字符串截取 string.sub

指定截取的开始位置和结束位置,如果是负数,则从倒数位置开始截取。

lua 复制代码
local str = "hello lua"
local strSub = string.sub(str, 1, 3)
print(strSub)

-- hel

local str = "hello lua"
local strSub = string.sub(str, -3)
print(strSub)

-- lua

字符串替换 string.gsub

指定被替换和要替换的字符,还可以指定替换次数,如果没有指定替换次数,默认全部替换。

lua 复制代码
local str = "hello lua"
local strSub = string.gsub(str, "l", "a", 2)
print(strSub)

-- heaao lua

插入 table.insert

在表的末尾插入新的元素,也可以指定插入的位置。

lua 复制代码
local names = { "Alice", "Bob" }
table.insert(names, "Jack")  -- 在末尾插入
for key, value in pairs(names) do
    print(key, value)
end

-- 1       Alice
-- 2       Bob
-- 3       Jack

local names = { "Alice", "Bob" }
table.insert(names, 1, "Jack")  -- 在索引为 1 的位置插入(也可以认为是在开头插入)
for key, value in pairs(names) do
    print(key, value)
end

-- 1       Jack
-- 2       Alice
-- 3       Bob

移除 table.remove

从表的末尾移除一个元素,也可以指定移除的位置。

lua 复制代码
local names = { "Alice", "Bob", "Jack" }
table.remove(names)  -- 移除末尾
for key, value in pairs(names) do
    print(key, value)
end

-- 1       Alice
-- 2       Bob

local names = { "Alice", "Bob", "Jack" }
table.remove(names, 1)  -- 移除索引为 1 的元素(也可以认为是移除开头)
for key, value in pairs(names) do
    print(key, value)
end

-- 1       Bob
-- 2       Jack

排序 table.sort

简单排序。

lua 复制代码
local nums = { 5, 3, 2, 4, 1 }
table.sort(nums)
for key, value in pairs(nums) do
    print(value)
end

-- 1 2 3 4 5

如果表中嵌套了表,还可以根据表的字段进行排序,需要给 table.sort 传入一个 function 作为参数,在函数内判断字段大小。

lua 复制代码
local children =
{
    {
        name = "Alice",
        age = 5
    },
    {
        name = "Bob",
        age = 2
    },
    {
        name = "Jack",
        age = 0
    }
}
table.sort(children, function (a, b)
    -- age 从小到大排序
    if a.age < b.age then
        return true
    end
    return false
end)
for key, value in pairs(children) do
    print(value.name, value.age)
end

-- Jack    0
-- Bob     2
-- Alice   5

拼接 table.concat

可以把表中的所有元素拼接成一个字符串,可以指定分隔符,拼接的元素范围。

lua 复制代码
local names = { "Alice", "Bob", "Jack" }
local str = table.concat(names)  -- 直接拼接
print(str)

-- AliceBobJack

local names = { "Alice", "Bob", "Jack" }
local str = table.concat(names, ",")  -- 用逗号隔开
print(str)

-- Alice,Bob,Jack

local names = { "Alice", "Bob", "Jack" }
local str = table.concat(names, ",", 2, 3)  -- 只拼接索引为 2 和 3 的元素
print(str)

-- Bob,Jack
相关推荐
okok__TXF1 天前
Nginx + Lua脚本打配合
nginx·lua
miss writer1 天前
Redis分布式锁释放锁是否必须用lua脚本?
redis·分布式·lua
努力--坚持2 天前
电商项目-网站首页高可用(一)
nginx·lua·openresty
黄名富2 天前
Redis 附加功能(二)— 自动过期、流水线与事务及Lua脚本
java·数据库·redis·lua
染指11102 天前
50.第二阶段x86游戏实战2-lua获取本地寻路,跨地图寻路和获取当前地图id
c++·windows·lua·游戏安全·反游戏外挂·游戏逆向·luastudio
spencer_tseng2 天前
WeakAuras NES Script(lua)
lua·wow·nes·weakauras
红黑色的圣西罗3 天前
xlua中自定义lua文件加载的一种方式
lua
法外狂徒张三!3 天前
Roblox踩坑1——动画无法完整播放
lua·roblox
冒泡P3 天前
【Lua热更新】上篇
开发语言·数据结构·unity·c#·游戏引擎·lua
两水先木示4 天前
【LuaFramework】LuaFramework_UGUI_V2框架学习
学习·unity·lua·luaframework·tolua