在任何编程语言中字符串的处理都是非常重要的,虽然都是简单的总结,但还是总结一下,以便使用时候查阅:
lua中的字符串是不可变的,就像是java中的String对象是final的一样
string.len(s)返回s的长度。
string.rep(s, n)返回重复s字符串n次的字符串。
string.lower(s)返回一份已将大写转成小写的字符串s的拷贝
string.upper(argument):字符串全部转为大写字母
lower,upper都是使用本地字符集的,另外,如果你想对一个string数组进行排序,并不区分大小写,你可能像这么写:
table.sort(a, function(a, b)
return string.lower(a) < string.lower(b)
end)
string.sub(s, i, j)将从s提取一段字符串,从i到j(闭区间[i, j]),当然你可以使用负索引值,将从字符串尾部算起,-1是最后一个字符,-2是倒数第二,等等,这么做的好处是当我们要提取直到末尾几个字符时,从后面数起就很方便。例如:
s = "[hello,world]"
print(string.sub(s, 2, -2)) --> hello,world
string.gsub(mainString,findString,replaceString,num)在字符串中替换,mainString为要原始字符串,findString为被替换的字符,replaceString要替换的字符,num替换次数(可以忽略,则全部替换),例如:
string.gsub("aaaa","a","z",3);
zzza3
string.find (str, substr, [init, [end]])
在一个指定的目标字符串中搜索指定的内容(第三个参数为索引),返回其具体位置。不存在则返回nil。例如
print(string.find("Hello Lua user", "Lua", 1))
7 9
string.reverse(arg)
字符串反转
string.char(arg) 和 string.byte(arg[,int])
char 将整型数字转成字符并连接, byte转换字符为整数值(可以指定某个字符,默认第一个字符)
string.format(...)
返回一个类似printf的格式化字符串
print(string.format("日期格式化 %02d/%02d/%04d", date, month, year))
模式匹配
lua string库里最强大的函数是那些模式匹配函数:find, match, gsub, gmatch。和其他脚本语言不同,lua既没有用POSIX的正则表达式,也没有用perl的正则表达式。原因是实现这些导致lua占用更多内存,而lua的初衷是小巧的,嵌入应用的语言
模式匹配函数:find, match, gsub, gmatch
string.match和string.find类似,都是在指定的string中查找相应的模式。不同的是,他返回的是找到的那部分string
例如:
date = "now is 2014/10/6 17:58"
d = string.match(date, "%d+/%d+/%d+")
print(d) --> 2014/10/6
string.gmatch函数将返回一个迭代器,用于迭代所有出现在给定字符串中的匹配字符串,例如:
local str = "Hello World"
local iteratorFunc = string.gmatch(str, "%a+") -- %a+表示匹配所有单词
for i in iteratorFunc do
print(i)
end
#可以获取字符串长度,例如:
>str='2016-09-01'
> print(#str)
10