字符串处理
Lua 提供了字符串处理函数,可以方便地处理字符串。
使用一对匹配的单引号.例:‘hello’.
使用一对匹配的双引号.例:“abclua”.
字符串还可以用一种长括号(即[[ ]]) 括起来的方式定义.
字符串长度
string.len 函数用于获取字符串的长度。
print(string.len("Hello, world!")) -- 13
字符串拼接
string.concat 函数用于拼接字符串。
print(string.concat("Hello", ", ", "world!")) -- Hello, world!
print(11 ..22); --空格
local num = 11
local num2 = 22
print(num..num2)
print(11 .."abc") --空格
print(num.."abc")
local str = "china"
local str2 = "nzhsoft"
print("china".."nzhsoft")
print(str.."nzhsoft")
print(str..str2)`
print(11+"33") -- 44.0
print(11+"abc33") -- error
print(tonumber("11") + 10) -- 21
print(tostring(10) .. "111") -- "10111"
local prefix = "image"
local postfix = ".jpg"
local filename
for i=0,10 do
filename = prefix..i..postfix
print(filename)
end
image0.jpg
image1.jpg
image2.jpg
image3.jpg
image4.jpg
image5.jpg
image6.jpg
image7.jpg
image8.jpg
image9.jpg
image10.jpg
string 库提供了字符串处理的通用函数。
字符串查找、子串、模式匹配等。 当在
Lua 中对字符串做索引时,第一个字符从 1 开始计算(而不是 C 里的 0 )。 索引可以
是负数,它指从字符串末尾反向解析。 即,最后一个字符在 -1 位置处
字符串长度
string.len 函数用于获取字符串的长度。
print(string.len("Hello, world!")) -- 13
字符串查找
string.find 函数用于查找子串。
-- 查找子串 "world" 在字符串 "Hello, world!" 中的位置
print(string.find("Hello, world!", "world")) -- 8 12
字符串替换
string.gsub 函数用于替换字符串中的子串。
-- 替换字符串 "world" 为 "Lua"
print(string.gsub("Hello, world!", "world", "Lua")) -- Hello, Lua!
字符串分割
string.gsplit 函数用于分割字符串。
s = "Hello, world!"
print(string.sub(s, 1, 5))
print(string.sub(s, 7, 12))
print(string.sub(s, 13, 18))
for word in string.gmatch(s, "%a+") do -- 匹配所有单词
print(word) -- 输出单词
end
%a 代表所有字母 a-zA-Z %A
+ 重复前一项 1 次或多次,尽可能多 ax+ 匹配 ax axxx %+
字符串转换
string.upper 函数用于转换字符串为大写。
-- 转换字符串 "hello" 为大写
print(string.upper("hello")) -- HELLO
string.lower 函数用于转换字符串为小写。
-- 转换字符串 "HELLO" 为小写
print(string.lower("HELLO")) -- hello
string.reverse 函数用于反转字符串。
-- 反转字符串 "Hello, world!"
print(string.reverse("Hello, world!")) -- !dlrow ,olleH
字符串重复
string.rep 函数用于重复字符串。
-- 重复字符串 "hello" 3 次
print(string.rep("hello", 3)) -- hellohellohello
格式化字符串
string.format 函数用于格式化字符串。
-- 格式化字符串 "Hello, %s!"
print(string.format("Hello, %s!", "world")) -- Hello, world!
s4 = "Lua"
s5 = "nzhsoft"
print(string.format("Basic formatting %s==%s",s4,s5))
-- Date formatting
date = 2; month = 1; year = 2014
print(string.format("Date formatting %02d/%02d/%03d", date, month, year))
-- Decimal formatting 小数格式
print(string.format("%.4f",1/3))
print(string.format("%c", 83) ) --输出 S
print(string.format("%+d", 17.0) ) --输出+17
print(string.format("%05d", 17)) --输出 00017
print(string.format("%o", 17) ) --输出 21
print(string.format("%x", 13) ) --输出 d
print(string.format("%X", 13) ) --输出 D
print(string.format("%e", 1000) ) --输出 1.000000e+03
print(string.format("%E", 1000) ) --输出 1.000000E+03
print(string.format("%6.3f", 13) ) --输出 13.000
print(string.format("%s", "monkey") ) --输出 monkey
print(string.format("%10s", "monkey") ) --输出 monkey
string.char 函数用于将数字转换为字符。
-- 将数字 65 转换为字符 "A"
print(string.char(65)) -- A
string.byte(s [, i [, j ]]) 函数用于获取字符串 s 的字节。
-- 获取字符串 "Hello, world!" 的字节
for i = 1, #"Hello, world!" do
print(string.byte("Hello, world!", i))
end
分割 string.sub
string.sub(s, i, j) 函数用于截取字符串 s 的子串,从 i 开始到 j 结束。
-- 截取字符串 "Hello, world!" 的子串 "world"
print(string.sub("Hello, world!", 8, 12)) -- world
upper/lower
s = "Lua";
print(string.upper(s))
print(string.lower(s))
t = {"ax","Cy","mk","Bjlk"}
for k,v in ipairs(t) do
print(k,v)
end
print("----------")
table.sort( t, function (a,b) -- sort是Lua中的内置函数,第一个参数是要排序的表,第二个参数是排序函数
return string.lower(a)<string.lower(b)
end )
for k,v in ipairs(t) do
print(k,v)
end
print("----------")
print(table.concat(t,"-")) -- 连接表中的元素,用指定字符串分隔
.char/byte/len/rep
--ASCII-》字符(串)
print(string.char())
print(string.char(48, 49, 50, 51, 52)) --01234
print(type(string.char(48, 49, 50, 51, 52))) --string
--字符(串)-》ASCII-》
print(string.byte("12345")); --'1' ->49
print(string.byte("12345", 3)); --'3' ->51
print(string.byte("12345", 1, 5)); --49 50 51 52 53
--长度
print(string.len("12345")) --5
--重复
print(string.rep("nzhsoft", 5))
--nzhsoftnzhsoftnzhsoftnzhsoftnzhsoft
sub/replce/find/reverse
--string.sub 下标分割
s2 = "[Lua nzhsoft]"
print(string.sub(s2, 2)) --Lua nzhsoft] 去除头
print(string.sub(s2, 2, 6)) --Lua n 下标分割 2-6
print(string.sub(s2, 2, -2)) --Lua nzhsoft 去除头尾 -2是倒数第二个字符
-- replacing strings 替换
ns = string.gsub(s2,"nzhsoft","Language")
print("The new string is",ns) -- [Lua Language]
-- find strings 查找 返回下标
s3 = "Lua Tutorial"
print(string.find(s3,"nzhsoft")) --5 12 从头开始找
print(string.find(s3,"nzhsoft",-1)) --nil -1是从后往前找
print(string.find(s3, "Tutorial", -#s3)) --5 12 -#s3是字符串长度
--reverse strings 反转
s4 = "Hello, world!"
print(string.reverse(s4)) --!dlrow ,olleH