> 技术文档 > Lua(字符串)

Lua(字符串)


Lua字符串基础

Lua中的字符串是不可变序列,可以包含任意字节数据(包括嵌入的\\0)。字符串可以用单引号、双引号或长括号([[ ]])定义:

str1 = \"Hello\"str2 = \'World\'str3 = [[Multi-linestring]]

字符串连接

使用..操作符连接字符串:

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) --abcdstring.byte(\"ABCD\",4) --68string.byte(\"ABCD\") --65--计算字符串长度string.len(\"abc\") --3--字符串n个copy> string.rep(\"abcd\",2) --abcdabcd

模式匹配

Lua使用轻量级模式匹配(非正则表达式):

-- 匹配数字for num in string.gmatch(\"a1b22c\", \"%d+\") do print(num) -- 输出1和22end-- 替换string.gsub(\"hello world\", \"world\", \"Lua\") -- \"hello Lua\"

字符串转义字符

常见转义序列:

  • \\n 换行
  • \\t 制表符
  • \\\\ 反斜杠
  • \\\" 双引号
  • \\\' 单引号

字符串与数值转换

num = tonumber(\"123\") -- 字符串转数字str = tostring(123) -- 数字转字符串

字符串缓冲区

处理大量字符串拼接时,使用table.concat更高效:

local parts = {}for i = 1, 100 do parts[i] = \"line\" .. iendlocal result = table.concat(parts, \"\\n\")

Unicode处理

Lua 5.3+支持UTF-8库:

utf8.len(\"中文\") -- 返回2utf8.offset(\"a中文b\", 3) -- 返回第3个字符的位置

字符串与表

可以通过string.charstring.byte处理ASCII值:

string.byte(\"A\") -- 65string.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位.