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位.