Lua 基础 03 常用函数

ops/2024/10/22 15:38:12/

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 = hellolocal minute = 2
local second = 30
local result = string.format("%02d:%02d", minute, second)
print(result)-- 02:30local 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     nillocal 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)-- hellocal 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) doprint(key, value)
end-- 1       Alice
-- 2       Bob
-- 3       Jacklocal names = { "Alice", "Bob" }
table.insert(names, 1, "Jack")  -- 在索引为 1 的位置插入(也可以认为是在开头插入)
for key, value in pairs(names) doprint(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) doprint(key, value)
end-- 1       Alice
-- 2       Boblocal names = { "Alice", "Bob", "Jack" }
table.remove(names, 1)  -- 移除索引为 1 的元素(也可以认为是移除开头)
for key, value in pairs(names) doprint(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) doprint(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 thenreturn trueendreturn false
end)
for key, value in pairs(children) doprint(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)-- AliceBobJacklocal names = { "Alice", "Bob", "Jack" }
local str = table.concat(names, ",")  -- 用逗号隔开
print(str)-- Alice,Bob,Jacklocal names = { "Alice", "Bob", "Jack" }
local str = table.concat(names, ",", 2, 3)  -- 只拼接索引为 2 和 3 的元素
print(str)-- Bob,Jack

http://www.ppmy.cn/ops/45501.html

相关文章

C语言:结构体(详细讲解)

目录 结构体类型的声明 结构声明 描述一个学生 结构体的创建和初始化​编辑 结构体的⾃引⽤ 结构体的特殊声明 结构体内存对⻬ 对⻬规则 练习1 练习2 练习3 练习4-结构体嵌套问题 为什么会存在内存对⻬ 修改默认对⻬数 结构体的传参 结构体实现位段 什么是位段…

uni-app App端实现文字语音播报(Ba-TTS)

前言 最近在遇到消息提示语音播放出来&#xff0c;查了一圈文档发现并没有自带api 后面想起支付宝收钱播报&#xff0c;不受限与系统环境和版本环境&#xff08;后面查阅他是音频实现的&#xff09; 如果是由安卓端需要语音播放功能-直接使用Ba-TTs救急&#xff08;需要付费2…

VSCODE 常用快捷键

快捷按键 注释 CTRL /CTRL KSHIFT ALT A取消注释 CTRL /CTRL KSHIFT ALT A搜索文件 Ctrl P移动到某一行 Ctrl g打开一个新窗口 Ctrl Shift N关闭窗口 Ctrl Shift W新建文件 Ctrl N文件间切换 Ctrl Tab全部文件搜索 Ctrl Shift F全屏 F11 打开文件出现中文乱码 文件右下角…

C++第二十二弹---vector深度剖析及模拟实现(下)

✨个人主页&#xff1a; 熬夜学编程的小林 &#x1f497;系列专栏&#xff1a; 【C语言详解】 【数据结构详解】【C详解】 目录 1、容量操作 2、内容修改操作 3、打印函数 4、迭代器失效 4.1、什么是迭代器失效 4.2、哪些操作会引起迭代器失效 总结 1、容量操作 size()…

UE5 双手握剑的实现(逆向运动学IK)

UE5 双手握剑的实现 IK 前言 什么是IK&#xff1f; UE官方给我们提供了很多对于IK处理的节点&#xff0c;比如ABRIK、Two Bone IK、Full Body IK 、CCD IK等&#xff0c;但是看到这&#xff0c;很多人就好奇了&#xff0c;什么是IK&#xff1f; 首先我们来看看虚幻小白人的骨…

Vue基础(3)监听数据

1. 监听 ref <script setup> import { ref, watch} from vueconst count ref(0) watch(count, (newValue, oldValue) > {console.log(count changed from ${oldValue} to ${newValue}) }) </script><template><button click"count">{{ …

Vue3上传下载的样式模版 | 附Demo(Vue3 + Java)

目录 前言1. 基本知识2. Demo3. 彩蛋3.1 下载3.2 上传 前言 基本的Vue3知识推荐阅读&#xff1a;Vue 目录 1. 基本知识 对于下述Demo涉及以下知识点&#xff1a; Vue 组件基础 使用 defineComponent 定义一个 Vue 组件 script setup 是一种新的 <script> 语法糖&…

大厂Java面试题:MyBatis的映射器(Mapper.xml)中有哪些常见的元素?

大家好&#xff0c;我是王有志。今天给大家带来的是一道来自京东的 MyBatis 面试题&#xff1a;MyBatis的映射器&#xff08;Mapper.xml&#xff09;中有哪些常见的元素&#xff1f;MyBatis 的映射器中提供了 9 个顶级元素&#xff0c;按照功能可以分为 3 类&#xff1a; SQL …