Lua 关于string库的常用方法
1. string.len(str) 返回字符串长度
print(string.len("123")) -- 3 print(string.len(" ")) -- 1
2. string.rep(str,n) 返回重复n次的str的字符串
-- 关于次数,针对于测试需要,我们可以设定很大的数值 print(string.rep("s",5)) -- sssss
3. string.lower(str) 将字符串str中的大写字母转换为小写字母
local str = "Hello Lua" print(string.lower(str)) -- hello lua -- 我们也可以用于对字符串进行排序 local strTab = {"Hello", "Abort", "Lua"} table.sort(strTab, function(a,b) return string.lower(a) < string.lower(b) end) local newStr = table.concat(strTab, ",") print(newStr) -- Abort,Hello,Lua
4. string.upper(str) 将字符串str中的小写字母转换为大写字母
print(string.upper("Hello Lua")) -- HELLO LUA
5. string.reverse(str) 将字符串str反转
print(string.reverse("EDCBA")) -- ABCDE
示例代码:
local _tab = {} local str = "hello world"; -- 倒序遍历字符串 for i = #str, 1, -1 do -- 截取字符,并存放到列表中 local char = string.sub(str,i,i) table.insert(_tab, char) end -- 字符串连接列表 local newstr = table.concat(_tab) print(newstr)
6. string.sub(str, i, j) 将字符串str从第 i 位置截取到第 j 位置。如果第三个参数没有,将默认为-1
local str = "Hello Lua" -- 从起始位置截取到末尾,结尾索引未添加,默认-1 print(string.sub(str,1)) -- Hello Lua print(string.sub(str,1,-1)) -- Hello Lua print(string.sub(str,1,#str)) -- Hello Lua -- 从中间位置截取任意字符串,结尾索引可使用负数,从后往前-1,-2, ... print(string.sub(str, 2, 4)) -- ell print(string.sub(str, 2,-6)) -- ell print(string.sub(str, -8, -6)) -- ell -- 注意:使用string.sub以及其他操作方法,不会改变原有字符串的值,而是返回新的字符串 print(str) -- Hello Lua
7. string.char(num1,num2, ...) 用于将一个或多个数字转换为字符,并返回又这些字符连接起来的字符串
print(string.char(101)) -- e print(string.char(108,111,118,101)) -- love
8. string.byte(str,index) 用于将字符串str的第 index 个字符转换为整数,其第二个参数未填写会默认为1
print(string.byte("love", 4)) -- 101 print(string.byte("love", -1)) -- 101 --[[ -- 注意:由于lua语言限制了栈大小,所以也限制了返回值的最大个数 默认最大为100W个,因此不能用于大小超过1M的字符串 ]]
9. string.format() 用于格式化字符串,类似于C语言的printf
-- 十进制:%d 十六进制:%x 八进制:%o 浮点数:%f 字符串:%s print(string.format("Number:%d",1)) -- Number:1 print(string.format("Number:%d",1.2)) -- Number:1 print(string.format("Float:%f",1)) -- Float:1.000000 -- 可以对于数字进行补位,%2d代表代表不足位数以空格代替,%04d代表不足位数以0代替 print(string.format("数字:%d/%2d/%04d",1,2,3)) -- 数字: 数字:1/ 2/0003 -- 可以使用小数对浮点数后面的位数进行限定 print(string.format("Float:%0.2f",1.2345)) -- Float:1.23 print(string.format("Float:%.2f",1.2345)) -- Float:1.23
10. string.find(str,pattern) 根据目标字符串str搜索找到pattern字符或字符串的起始位置和结束位置,如果没有返回nil
local str = "Hello, today is 2019/1/11 at 18:30 PM" -- 查找正确,返回字符或字符串的起始位置,结束位置 local startPos, endPos = string.find(str,'H') print(startPos,endPos) -- 1 1 local startPos, endPos = string.find(str,"Hello") print(startPos,endPos) -- 1 5 -- 查找错误,返回nil local startPos,endPos = string.find(str,"Wang") print(startPos,endPos) -- nil nil -- 可以根据string.find获取的位置来获取指定字符串 local newStr = string.sub(str,1,5) print(newStr) -- Hello
11. string.gsub(str,modelstr,replacestr,pos) 在字符串str中查找modelstr,并将其替换为replacestr,其pos用于限制替换范围。
有两个返回值,第一个是替换后的字符串,第二个是替换的次数
local str = "Hello, Python" local newStr = string.gsub(str,"Python", "Lua") print("源字符串:" .. str) -- 源字符串:Hello, Python print("新字符串:" .. newStr) -- 新字符串:Hello, Lua -- 倘若字符串没找到替换的,不变 local newStr = string.gsub(str,"C++", "Lua") print("新字符串:" .. newStr) -- 新字符串:Hello, Python -- 通过第四个参数来限定替换的次数 local newStr,count = string.gsub("all lii", "l","x") print(newStr,count) -- axx xii 3 local newStr,count = string.gsub("all lii", "l","x",3) print(newStr,count) -- axx xii 3 local newStr,count = string.gsub("all lii", "l","x",2) print(newStr,count) -- axx lii 2 local newStr,count = string.gsub("all lii", "l","x",1) print(newStr,count) -- axl lii 1