当前位置: 首页 > news >正文

Lua 基础 03 常用函数

Lua 基础相关知识 第三期

字符串

格式化字符串 string.format

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

常用的格式控制符:

  • %s 接收一个字符串
  • %d 接收一个数字并转化为有符号整数,%02d 可以显示两位数,个位数时前面补 0,通常用于倒计时格式
  • %f 接收一个数字并转化为浮点数,默认保留 6 位小数,后面补 0,%.2f 可以保留两位小数
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 计算字符串长度。

local str = "hello"
print(string.len(str))  -- 5

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

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

local str = "hello 小明"
print(string.len(str))  -- 12
print(utf8.len(str))    -- 8

字符串查找 string.find

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

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

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

例如,倒数一个字符,因为要查找的 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

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

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

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

local str = "hello lua"
local strSub = string.gsub(str, "l", "a", 2)
print(strSub)-- heaao lua

插入 table.insert

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

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

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

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

简单排序。

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 作为参数,在函数内判断字段大小。

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

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

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

相关文章:

  • 云端力量:利用移动云服务器高效部署Spring Boot Web应用
  • 等保2.0看这一篇就够了
  • Nginx R31 doc-12-NGINX SSL Termination 安全加密
  • QT全局气泡类型提示框【自动宽度、多屏自适应居中】
  • 源码部署ELK
  • 验证软件需求
  • Go语言的中间件(middleware)是如何实现的?
  • 2024年云南特岗教师报名流程,超详细,明天就开始报名哦!
  • C++设计模式之策略模式、迭代器模式、适配器模式、工厂模式、超级工厂模式、享元模式、代理模式
  • SpringBoot自动化配置原理
  • Cortex-M3的SysTick 定时器
  • linux文件权限常用知识点,基于Linux(openEuler、CentOS8)
  • 基于Rsoft的Fullwave仿真模块进行双芯波导能量耦合与波分复用
  • Java 18 新特性详解
  • 后量子密码解决方案
  • 时间复杂度分析经典问题——最大子序列和
  • 【知识碎片】第三方登录弹窗效果
  • 30天自制操作系统-2
  • 78. Subsets
  • Android Volley源码解析
  • Android开源项目规范总结
  • CentOS 7 修改主机名
  • JS题目及答案整理
  • miaov-React 最佳入门
  • mysql中InnoDB引擎中页的概念
  • python3 使用 asyncio 代替线程
  • Python3爬取英雄联盟英雄皮肤大图
  • underscore源码剖析之整体架构
  • 彻底搞懂浏览器Event-loop
  • 创建一个Struts2项目maven 方式
  • 从零搭建Koa2 Server
  • 诡异!React stopPropagation失灵
  • 聚簇索引和非聚簇索引
  • 译米田引理
  • shell使用lftp连接ftp和sftp,并可以指定私钥
  • ​创新驱动,边缘计算领袖:亚马逊云科技海外服务器服务再进化
  • !! 2.对十份论文和报告中的关于OpenCV和Android NDK开发的总结
  • # 学号 2017-2018-20172309 《程序设计与数据结构》实验三报告
  • ### RabbitMQ五种工作模式:
  • (1)svelte 教程:hello world
  • (2)(2.4) TerraRanger Tower/Tower EVO(360度)
  • (2)nginx 安装、启停
  • (ibm)Java 语言的 XPath API
  • (Ruby)Ubuntu12.04安装Rails环境
  • (Windows环境)FFMPEG编译,包含编译x264以及x265
  • (第8天)保姆级 PL/SQL Developer 安装与配置
  • (分类)KNN算法- 参数调优
  • (七)Java对象在Hibernate持久化层的状态
  • (完整代码)R语言中利用SVM-RFE机器学习算法筛选关键因子
  • (转)大道至简,职场上做人做事做管理
  • .cn根服务器被攻击之后
  • .dat文件写入byte类型数组_用Python从Abaqus导出txt、dat数据
  • .gitignore文件—git忽略文件
  • .NET C# 使用GDAL读取FileGDB要素类
  • .NetCore Flurl.Http 升级到4.0后 https 无法建立SSL连接