当前位置:网站首页>字符串 - 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
谢谢大家观看
边栏推荐
- The server is completely broken and cannot be repaired. How to use backup to restore it into a virtual machine without damage?
- A tour of gRPC:03 - proto序列化/反序列化
- 服务器彻底坏了,无法修复,如何利用备份无损恢复成虚拟机?
- skimage学习(2)——RGB转灰度、RGB 转 HSV、直方图匹配
- Module VI
- Biped robot controlled by Arduino
- [Seaborn] implementation of combined charts and multi subgraphs
- [Seaborn] combination chart: pairplot and jointplot
- LeetCode 1155. N ways to roll dice one question per day
- Reflections on "product managers must read: five classic innovative thinking models"
猜你喜欢
随机推荐
LeetCode 1043. Separate the array to get the maximum and daily questions
[image sensor] correlated double sampling CDs
rpcms获取指定分类下的文章的方法
Number of exchanges in the 9th Blue Bridge Cup finals
QT 图片背景色像素处理法
第九届 蓝桥杯 决赛 交换次数
[Huang ah code] Why do I suggest you choose go instead of PHP?
How to add aplayer music player in blog
[video / audio data processing] Shanghai daoning brings you elecard download, trial and tutorial
Pychart ide Download
What is cloud computing?
测试用例管理工具推荐
让保险更“保险”!麒麟信安一云多芯云桌面中标中国人寿, 助力金融保险信息技术创新发展
【Seaborn】组合图表、多子图的实现
mysql官网下载:Linux的mysql8.x版本(图文详解)
LeetCode 120. Triangle minimum path and daily question
邮件服务器被列入黑名单,如何快速解封?
LeetCode 1049. Weight of the last stone II daily question
麒麟信安操作系统衍生产品解决方案 | 存储多路径管理系统,有效提高数据传输可靠性
防火墙系统崩溃、文件丢失的修复方法,材料成本0元
![[image sensor] correlated double sampling CDs](/img/1c/3a641ad47ff91536db602dedc82705.png)







