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
相关推荐
小李云雾1 天前
FastAPI 后端开发:文件上传 + 表单提交
开发语言·python·lua·postman·fastapi
曼巴UE51 天前
Unlua 官方案例
c++·ue5·lua·ue
列星随旋2 天前
基于 Redis + Lua,实现“多维度原子限流”(令牌桶 + 滑动窗口)
java·redis·lua
上海合宙LuatOS2 天前
LuatOS扩展库API——【exgnss】GNSS定位
物联网·lua·luatos
0xDevNull2 天前
Redis Lua 脚本详细教程
redis·缓存·lua
上海合宙LuatOS2 天前
LuatOS扩展库API——【exlcd】显示屏控制
物联网·lua·luatos
0xDevNull2 天前
Spring Boot 中使用 Redis Lua 脚本详细教程
spring boot·redis·lua
DJ斯特拉4 天前
Redis使用lua脚本
junit·单元测试·lua
Aktx20FNz4 天前
OpenClaw中级到高级教程
lua
LcGero4 天前
Lua + Cocos Creator 实战:用 Lua 驱动 UI 与游戏逻辑
游戏·ui·lua