在任何编程语言中字符串的处理都是非常重要的,虽然都是简单的总结,但还是总结一下,以便使用时候查阅:

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