Lua(字符串)
Lua字符串基础
Lua中的字符串是不可变序列,可以包含任意字节数据(包括嵌入的\0
)。字符串可以用单引号、双引号或长括号([[ ]]
)定义:
str1 = "Hello"
str2 = 'World'
str3 = [[Multi-line
string]]
字符串连接
使用..
操作符连接字符串:
msg = "Hello" .. " " .. "World" -- "Hello World"
字符串长度
通过#
操作符获取字符串长度:
len = #"Lua" -- 3
字符串常用方法
Lua标准库提供字符串处理函数(通过string
模块):
-- 大小写转换
string.upper("hello") -- "HELLO"
string.lower("WORLD") -- "world"-- 查找子串
string.find("Lua is great", "is") -- 5, 6-- 截取子串
string.sub("Lua", 2, 3) -- "ua"-- 格式化输出
string.format("Pi: %.2f", math.pi) -- "Pi: 3.14"--反转
reversedString = string.reverse(string)
print("新字符串为",reversedString)--替换
string.gsub("aaaa","a","z",3); --zzza 3--类型转换(char 将整型数字转成字符并连接, byte 转换字符为整数值(可以指定某个字符,默认第一个字符))
string.char(97,98,99,100) --abcd
string.byte("ABCD",4) --68
string.byte("ABCD") --65--计算字符串长度
string.len("abc") --3--字符串n个copy
> string.rep("abcd",2) --abcdabcd
模式匹配
Lua使用轻量级模式匹配(非正则表达式):
-- 匹配数字
for num in string.gmatch("a1b22c", "%d+") doprint(num) -- 输出1和22
end-- 替换
string.gsub("hello world", "world", "Lua") -- "hello Lua"
字符串转义字符
常见转义序列:
\n
换行\t
制表符\\
反斜杠\"
双引号\'
单引号
字符串与数值转换
num = tonumber("123") -- 字符串转数字
str = tostring(123) -- 数字转字符串
字符串缓冲区
处理大量字符串拼接时,使用table.concat
更高效:
local parts = {}
for i = 1, 100 doparts[i] = "line" .. i
end
local result = table.concat(parts, "\n")
Unicode处理
Lua 5.3+支持UTF-8库:
utf8.len("中文") -- 返回2
utf8.offset("a中文b", 3) -- 返回第3个字符的位置
字符串与表
可以通过string.char
和string.byte
处理ASCII值:
string.byte("A") -- 65
string.char(65) -- "A"
附:(格式字符串转义码)
- %c - 接受一个数字, 并将其转化为ASCII码表中对应的字符
- %d, %i - 接受一个数字并将其转化为有符号的整数格式
- %o - 接受一个数字并将其转化为八进制数格式
- %u - 接受一个数字并将其转化为无符号整数格式
- %x - 接受一个数字并将其转化为十六进制数格式, 使用小写字母
- %X - 接受一个数字并将其转化为十六进制数格式, 使用大写字母
- %e - 接受一个数字并将其转化为科学记数法格式, 使用小写字母e
- %E - 接受一个数字并将其转化为科学记数法格式, 使用大写字母E
- %f - 接受一个数字并将其转化为浮点数格式
- %g(%G) - 接受一个数字并将其转化为%e(%E, 对应%G)及%f中较短的一种格式
- %q - 接受一个字符串并将其转化为可安全被Lua编译器读入的格式
- %s - 接受一个字符串并按照给定的参数格式化该字符串
为进一步细化格式, 可以在%号后添加参数. 参数将以如下的顺序读入:
- (1) 符号: 一个+号表示其后的数字转义符将让正数显示正号. 默认情况下只有负数显示符号.
- (2) 占位符: 一个0, 在后面指定了字串宽度时占位用. 不填时的默认占位符是空格.
- (3) 对齐标识: 在指定了字串宽度时, 默认为右对齐, 增加-号可以改为左对齐.
- (4) 宽度数值
- (5) 小数位数/字串裁切: 在宽度数值后增加的小数部分n, 若后接f(浮点数转义符, 如%6.3f)则设定该浮点数的小数只保留n位, 若后接s(字符串转义符, 如%5.3s)则设定该字符串只显示前n位.