2.9 字符串类型
在Lua中字符串可以双引号或单引号括起来表示,示例如下:
local s1 = "Hello Lua" local s2 = 'Hello Lua'
有的时候我们需要将字符串拼接起来,在Java中使用“+”号将字符串连接,而在Lua中使用双点“..”将字符串拼接起来。示例代码如下:
local s ="Hello".."Lua"
获得字符串长度的需要使用String库提供string.len(s)函数。示例代码如下:
local slen = string.len(s)
其中s是字符串。
String库还提供了很多函数,下面分别介绍一下。
2.9.1 字符串截取
字符串截取是String库提供的string.sub(s, n, m)函数截取字符串,该函数是截取从第n个字符到第m个字符之间的字符串。示例代码如下:
local s = "Hello Lua" local sub1 = string.sub(s,1,3) ① print(sub1) --输出Hel local sub2 = string.sub(s,2, -2) ② print(sub2) --输出 ello Lu
输出结果如下:
Hel ello Lu
上述代码第①行是截取1~3字符串,与Java等语言不同的是Lua中字符串的索引下标从1开始,索引可以有负数,-1表示最后一个字符,-2表示倒数第2个字符,所以第②行代码截取结果是ello Lu,索引2的字符是e,索引-2的字符是u。
2.9.2 字符串转换
String库提供了字符串转换的相关函数,包括:大写、小写、重复和翻转等。示例代码如下:
local s = "Hello Lua" local s1 = string.lower(s) ① print(s1) local s2 = string.upper(s) ② print(s2) local s3 = string.rep("Hello",3) ③ print(s3) local s4 = string.reverse("Hello") ④ print(s4)
输出结果如下:
hello lua HELLO LUA Hello Hello Hello olleH
上述代码第①行是使用函数string.lower(s)将s字符串转换为小写字符串,输出结果“hello lua”。第②行代码是使用函数string.upper(s)将s字符串转换为大写字符串,输出结果“HELLO LUA”。
第③行代码是使用函数string.rep("Hello",3)将重复拼接3次,输出结果“Hello Hello Hello”。第④行代码是使用函数string.reverse("Hello")将翻转字符串,输出结果“olleH”。
2.9.3 字符串查询
String库提供的string.find(s, sub)函数是从s字符串中查找sub字符串,函数有两个返回值,示例代码如下:
local s = "Hello Lua" local i, j = string.find(s, "Hello") ① print(i, j)
输出结果如下:
1 5
上述代码第①行是使用函数string.find(s, "Hello")在"Hello Lua"中查找"Hello",返回值i为找到开始位置,j为结束的字符串。
2.9.4 字符串格式化
String库提供的string.format("format", ...)函数是对字符串进行格式化输出,其中的格式化所需要参数有:s、c、d、E、e、f、g、G、i、o、u、X和x,这些参数与C语言中的printf("format", ...)函数是类似,如表2-5所示。
表2-5 格式化参数
示例代码如下:
local s = string.format("%s %q", "Hello", "Lua") print(s) local s = string.format("%c%c%c",76,117,97) print(s) local s = string.format("%e, %E", 3.14,3.14) print(s) local s = string.format("%f, %g, %G",3.14, math.pi, math.pi) print(s) local s = string.format("%d, %i, %u", 10, 10, -10) print(s) local s = string.format("%o, %x, %X", 10, 10, 10) print(s)
输出结果如下:
Hello "Lua" Lua 3.140000e+000, 3.140000E+000 3.140000, 3.14159, 3.14159 10, 10, 4294967286 12, a, A