On this page

Lua 字符串

Lua 字符串详解

Lua 中的字符串是不可变的值,用于表示文本数据。以下是 Lua 字符串的全面介绍:

1. 字符串表示方式

基本表示

local str1 = "双引号字符串"
local str2 = '单引号字符串'
print(str1)  -- 输出: 双引号字符串
print(str2)  -- 输出: 单引号字符串

多行字符串

local multiLine = [[
这是
多行
字符串
]]
print(multiLine)

转义字符

local escaped = "第一行\n第二行\t制表符\"引号\\反斜线"
print(escaped)

2. 字符串操作

连接操作

local s1 = "Hello"
local s2 = "Lua"
local greeting = s1 .. " " .. s2
print(greeting)  -- 输出: Hello Lua

长度操作

local s = "Lua编程"
print(#s)  -- 输出: 7 (UTF-8中文字符占3字节)

重复操作

local line = "-"
print(line:rep(10))  -- 输出: ----------

3. 字符串常用函数

string 标准库函数

-- 大小写转换
print(string.upper("Lua"))  -- 输出: LUA
print(string.lower("Lua"))  -- 输出: lua

-- 子字符串
print(string.sub("Lua编程", 4, 6))  -- 输出: 编

-- 查找
print(string.find("Hello Lua", "Lua"))  -- 返回: 7   9

-- 替换
print(string.gsub("Lua Lua", "Lua", "Python"))  -- 输出: Python Python

字符串方法语法(Lua 5.1+)

local s = "Lua Programming"

-- 使用冒号语法调用方法
print(s:upper())       -- 输出: LUA PROGRAMMING
print(s:sub(5, 8))     -- 输出: Prog
print(s:find("mm"))    -- 返回: 11  12

4. 字符串格式化

-- 基本格式化
local formatted = string.format("姓名: %s, 年龄: %d, 分数: %.2f", "张三", 25, 95.5)
print(formatted)

-- 常用格式说明符
-- %d - 整数
-- %f - 浮点数
-- %s - 字符串
-- %x - 十六进制
-- %% - 百分号

5. 字符串与数字转换

-- 字符串转数字
local num = tonumber("123.45")
print(num + 1)  -- 输出: 124.45

-- 数字转字符串
local str = tostring(123)
print(str .. "abc")  -- 输出: 123abc

6. 字符串模式匹配

Lua 提供了强大的模式匹配功能(不是正则表达式但类似):

local text = "今天是2023年5月15日"

-- 提取日期
local year, month, day = string.match(text, "(%d+)年(%d+)月(%d+)日")
print(year, month, day)  -- 输出: 2023  5  15

-- 替换所有数字
local result = string.gsub(text, "%d+", "X")
print(result)  -- 输出: 今天是X年X月X日

7. UTF-8 字符串处理(Lua 5.3+)

local utf8 = require("utf8")

local chinese = "中文测试"

-- UTF-8字符数
print(utf8.len(chinese))  -- 输出: 4

-- 逐个字符迭代
for p, c in utf8.codes(chinese) do
    print(utf8.char(c))
end

8. 字符串缓冲区(高效拼接)

对于大量字符串拼接,使用 table.concat 更高效:

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

9. 字符串与表的关系

字符串可以作为表的键:

local t = {
    ["name"] = "Lua",
    ["version"] = 5.4
}
print(t["name"])  -- 输出: Lua

Lua 的字符串功能强大且灵活,理解这些特性可以让你更高效地处理文本数据。