当前位置:网站首页>字符串 - string(Lua)
字符串 - string(Lua)
2022-07-07 15:38:00 【有趣就行】
字符串
string 是 Lua 中八大数据类型之一,Lua 中没有字符的概念,所有的文本都是 string。Lua 中的string 是以 8个比特 来储存的。
Lua中的字符串与大多数语言字符串一样都是不可变量。所有改变string的操作,都是生成新的string。Lua中string数据结构使用的是哈希算法实现的字符串池。这样的做法是为了保证内存不泄露,且字符串比较时大大提高性能。
表示方法
string有两种表示方法
- ’ 单引号 如
's'
- " 双引号 如
"s"
它们都是表示字符串常量的方式,建议使用一种即可,不要混用。
长字符串
string可以使用 [[ ]]
这样的方式来表示多行长字符串的书写
如
local s = [[ L u a]]
转义字符
转义字符 | 意义 | ASCII码值(十进制) |
---|---|---|
\a | 响铃(BEL) | 007 |
\b | 退格(BS) ,将当前位置移到前一列 | 008 |
\f | 换页(FF),将当前位置移到下页开头 | 012 |
\n | 换行(LF) ,将当前位置移到下一行开头 | 010 |
\r | 回车(CR) ,将当前位置移到本行开头 | 013 |
\t | 水平制表(HT) (跳到下一个TAB位置) | 009 |
\v | 垂直制表(VT) | 011 |
\ | 代表一个反斜线字符’‘’ | 092 |
’ | 代表一个单引号(撇号)字符 | 039 |
" | 代表一个双引号字符 | 034 |
\0 | 空字符(NULL) | 000 |
\ddd | 1到3位八进制数所代表的任意字符 | 三位八进制 |
\xhh | 1到2位十六进制所代表的任意字符 | 二位十六进制 |
常用函数(字符串标准库)
..
: 链接两个字符串(相当于其他语言中的 +
符号,连接两种字符串从而生成新的字符串)
string.upper
: 字符串全部转为大写字母。string.lower
: 字符串全部转为小写字母。
string.gusb
: 在字符串中替换。
string.reverse
: 字符串反转
string.find
: 查找子串,返回这个子串的起始索引和结束索引(可以使用模式匹配)
string:rep
: 返回字符串string的n个拷贝
string.char
: char 将整型数字转成字符并连接string.byte
: byte 转换字符为整数值
string.len
: 计算字符串长度(也可以使用 #)
string.sub
: 截取字符串
string.gmatch
: 返回一个迭代器函数,每一次调用这个函数,返回一个在字符串 str 找到的下一个符合 pattern 描述的子串。如果参数 pattern 描述的字符串没有找到,迭代函数返回nil。(模式匹配)
string.match
: 只寻找源字串str中的第一个配对. 参数init可选, 指定搜寻过程的起点, 默认为1。
在成功配对时, 函数将返回配对表达式中的所有捕获结果; 如果没有设置捕获标记, 则返回整个配对字符串. 当没有成功的配对时, 返回nil。(模式匹配)
Lua中的字符串模式匹配是支持正则表达式(不完全支持)。具体看官方文档
具体的使用可以看官方文档
UTF - 8编码
Lua是支持UTF-8的,还提供了一些处理的库函数(Lua5.3)。
local s = "Lua语言"
--我们需要截取后面的两个中文汉字,方法如下
local s1 = s:sub(utf8.offset(s, -2) --语言
--获得UTF-8编码长度
local len = utf8.len(s) --5
--遍历UTF-8编码字符串中的字符
for p, c in utf8.codes(s) do --p是在字符串s的位置, c是utf8编码的字符编码(可以转换)
print(utf8.char(c))
end
Lua还提供的
utf8.char
和utf8.codepoint
两种处理函数字符编码转换为字符串和字符串转换为数字
这与string的string.char
和string.byte
类似
强制类型转换
在使用算术运算符时,如果操作的是字符串,Lua会尝试将string类型变为浮点数。
print("2" * 2) --4.0
print("2" * "2") --4.0
同理,使用的是字符串连接符..
,如果操作的是number,Lua会尝试将number类型将转换为字符串
print("20" .. 22) --2022
print(20 .. 22) --2022
谢谢大家观看
边栏推荐
- 电脑无法加域,ping域名显示为公网IP,这是什么问题?怎么解决?
- 《产品经理必读:五种经典的创新思维模型》的读后感
- [image sensor] correlated double sampling CDs
- Notes on installing MySQL in centos7
- [fan Tan] after the arrival of Web3.0, where should testers go? (ten predictions and suggestions)
- Flask搭建api服务-生成API文档
- LeetCode 1031. 两个非重叠子数组的最大和 每日一题
- LeetCode 1626. 无矛盾的最佳球队 每日一题
- Test case management tool recommendation
- LeetCode 1186. Delete once to get the sub array maximum and daily question
猜你喜欢
随机推荐
Test case management tool recommendation
LeetCode 1155. 掷骰子的N种方法 每日一题
Solidity 开发环境搭建
Sator launched Web3 game "satorspace" and launched hoobi
LeetCode 1774. The dessert cost closest to the target price is one question per day
Process from creation to encapsulation of custom controls in QT to toolbar (I): creation of custom controls
How to mount the original data disk without damage after the reinstallation of proxmox ve?
Flash build API Service - generate API documents
LeetCode 1155. N ways to roll dice one question per day
SIGGRAPH 2022最佳技术论文奖重磅出炉!北大陈宝权团队获荣誉提名
QT video transmission
电脑无法加域,ping域名显示为公网IP,这是什么问题?怎么解决?
管理VDI的几个最佳实践
Skimage learning (1)
[fan Tan] after the arrival of Web3.0, where should testers go? (ten predictions and suggestions)
如何在博客中添加Aplayer音乐播放器
【Seaborn】组合图表、多子图的实现
[Fantan] how to design a test platform?
麒麟信安加入宁夏商用密码协会
LeetCode 1654. 到家的最少跳跃次数 每日一题