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+") do
    print(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 do
    parts[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.charstring.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位.
相关推荐
XH华7 分钟前
C++语言第二章类和对象(下)
开发语言·c++
从零开始的代码生活_17 分钟前
C++ stack、queue 与 priority_queue:容器适配器原理与实战
开发语言·c++·后端·学习·算法
techdashen39 分钟前
Go 1.25 新增 `reflect.TypeAssert`:更直接、更高效地从 `reflect.Value` 取出类型值
开发语言·后端·golang
2zcode42 分钟前
项目文档:基于MATLAB低采样率ISAR成像的快速稀疏重建算法研究
开发语言·算法·matlab
xixi09241 小时前
JMeter5.6.3基础使用教程1
java·开发语言
এ慕ོ冬℘゜1 小时前
原生 JS 实现自定义单选日历组件(无 UI 库、纯手写、禁用过去日期)
开发语言·javascript·ui
Ulyanov1 小时前
刚体动力学方程——牛顿-欧拉与陀螺效应的奥秘
开发语言·python·目标跟踪·雷达电子对抗·导引头
罗超驿1 小时前
15.Java异常处理:从束手无策到从容应对
java·开发语言
MoonBit月兔2 小时前
MoonBit v0.10.4版本更新
开发语言·人工智能·编程·moonbit
小樱花的樱花2 小时前
Linux 多线程编程:互斥锁(Mutex)详解
linux·c语言·开发语言