【Lua】第四篇:字符串操作

一. 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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值