文章目录
- 一. Lua中字符串的表示方法
- 二. 获取字符串长度
- 三. 字符串多行打印
- 方法一:使用 \n 换行
- 方法一:使用 [[ ]]
- 四. 字符串拼接
- 五. 别的类型转字符串
- 六. 常用字符串接口
- 1. 把字符串内容全转为小写
- 2. 把字符串内容全转为大写
- 3. 字符串翻转
- 4. 子串查找
- 4. 获取子串
- 5. 子串替换
- 6. 字符串重复拼接
一. Lua中字符串的表示方法
在 Lua 中,不区分字符和字符串,使用单引号(‘’)和双引号(“”)括起来的,都统称为 string 类型
local s1 = '单引号字符串'
local s2 = "双引号字符串"
print(type(s1)) --> string
print(type(s2)) --> string
二. 获取字符串长度
在字符串变量名之前加上 # 符号,可以获取到该字符串的长度:
local str = 'abc,de'
print(#str) --> 6
其中一个汉字占三个长度:
local str = '我'
print(#str) --> 3
三. 字符串多行打印
方法一:使用 \n 换行
PS:Lua 中也是支持转义字符的,所以我们可以在 \n 进行换行
local s1 = '123\n456'
print(s1)------输出结果------
123
456
方法一:使用 [[ ]]
print 在打印时,如果检测到有双方括号,会严格地按照里面的格式把内容进行输出:
四. 字符串拼接
在使用 print 打印时,可以使用 … 把两边的内容进行拼接,它的作用相当于 +,但是它的作用范围更广,不加可以拼接字符串,还可以拼接数值类型的值:
注意:不能拼接 boolean 类型的值
--拼接:字符串+boolean
print('123' .. false) --> error:不允许拼接 boolean 的值
五. 别的类型转字符串
我们可以使用 tostring 方法,把非字符串类型转成字符串:
local bl = false
print(type(bl)) --> boolean
print(type(tostring(b1))) --> string
六. 常用字符串接口
根据“二八原则”,在实际开中,20% 的接口函数就能解决 80% 的问题,下面我们介绍几个常用的字符串接口函数
1. 把字符串内容全转为小写
函数原型:string.lower (s)
函数介绍:接收一个字符串,将其中的大写字符都转为小写后返回其副本。 其它的字符串不会更改。
local s = "abCdefgCd"
print(string.lower(s)) -->abcdefgcd
2. 把字符串内容全转为大写
函数原型:string.upper (s)
函数介绍:接收一个字符串,将其中的小写字符全都转为大写后返回其副本。其它的字符串不会更改。
local s = "abCdefgCd"
print(string.upper(s)) -->ABCDEFGCD
3. 字符串翻转
函数原型:string.reverse (s)
函数介绍:原字符串的内容不变,返回字符串 s 的翻转串
local s = "abCdefgCd"
print(string.reverse(s)) -->dCgfedCba
print(s) -->abCdefgCd
4. 子串查找
函数原型:string.find (s, subStr [, init [, plain]])
函数介绍:
- 查找第一个字符串 s 中匹配到的 subStr。 如果找到一个匹配,find 会返回 s 中关于它起始及终点位置的索引; 否则,返回 nil。
- 第三个可选数字参数 init 指明从哪里开始搜索; 默认值为 1 ,同时可以是负值,表示从后往前搜索。
- 第四个可选参数 plain 为 true 时, 表示关闭模式匹配机制。 此时函数仅做直接的 “查找子串”的操作, 而 pattern 中没有字符被看作 magic 字符。 注意,如果给定了 plain,就必须写上 init 。
代码示例
local s = "abCdefgCd"
print(string.find(s, "Cde")) --> 3 5
4. 获取子串
函数原型:string.sub (s, i [, j])
函数介绍:返回 s 的子串, 该子串从 i 开始到 j 结束; i 和 j 都可以为负数。 如果不给出 j ,就当它是 -1 (和字符串长度相同)。
特别是, 调用 string.sub(s,1,j) 可以返回 s 的长度为 j 的前缀串:
-- 注意:Lua中,起始下标是从1开始的
local s = "abCdefgCd"
print(string.sub(s, 1, 4)) -->abCd
而 string.sub(s, -i) 返回长度为 i 的后缀串:
-- 注意:-i 的含义相当于倒数第 i 个字符
local s = "abCdefgCd"
print(string.sub(s, -2)) -->Cd
如果在对负数索引转义后 i 小于 1 的话,就修正回 1:
如果 j 比字符串的长度还大,就修正为字符串长度。 如果在修正之后,i 大于 j, 函数返回空串:
local s = "abCdefgCd"
print(string.sub(s, 1, 500)) -->abCdefgCd
print(string.sub(s, 1000, 500)) -->''
5. 子串替换
函数原型:string.gsub (s, sunStr, repl [, n])
函数介绍:将字符串 s 中,所有的(或是在 n 给出时的前 n 个) sunStr 都替换成 repl ,并返回其副本。 repl 可以是字符串、表、或函数。 gsub 还会在第二个返回值返回一共发生了多少次匹配。 gsub 这个名字来源于 Global SUBstitution 。
local s = "abCdefgCd"
print(string.gsub(s, "Cd", "**")) -->ab**efg** 2
6. 字符串重复拼接
函数介绍:string.rep (s, n [, sep])
函数原型:返回 n 个字符串 s 以字符串 sep 为分割符连在一起的字符串。 默认的 sep 值为空字符串(即没有分割符)。 如果 n 不是正数则返回空串。
local s = "abCdefgCd"
print(string.rep(s, 2)) -->abCdefgCdabCdefgCd
print(string.rep(s, 2, ', ')) -->abCdefgCd, abCdefgCd