当前位置:网站首页>字符串 - 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
谢谢大家观看
边栏推荐
- rpcms获取指定分类下的文章的方法
- SlashData开发者工具榜首等你而定!!!
- AI来搞财富分配比人更公平?来自DeepMind的多人博弈游戏研究
- LeetCode 1774. The dessert cost closest to the target price is one question per day
- With the latest Alibaba P7 technology system, mom doesn't have to worry about me looking for a job anymore
- The server is completely broken and cannot be repaired. How to use backup to restore it into a virtual machine without damage?
- [image sensor] correlated double sampling CDs
- mysql使用笔记一
- skimage学习(3)——Gamma 和 log对比度调整、直方图均衡、为灰度图像着色
- Flask搭建api服务
猜你喜欢
Sator a lancé le jeu web 3 "satorspace" et a lancé huobi
Master this promotion path and share interview materials
NeRF:DeepFake的最终替代者?
The process of creating custom controls in QT to encapsulating them into toolbars (II): encapsulating custom controls into toolbars
User defined view essential knowledge, Android R & D post must ask 30+ advanced interview questions
Nerf: the ultimate replacement for deepfake?
QT中自定义控件的创建到封装到工具栏过程(一):自定义控件的创建
专精特新软件开发类企业实力指数发布,麒麟信安荣誉登榜
Leetcode brush questions day49
让保险更“保险”!麒麟信安一云多芯云桌面中标中国人寿, 助力金融保险信息技术创新发展
随机推荐
【视频/音频数据处理】上海道宁为您带来Elecard下载、试用、教程
直接上干货,100%好评
The mail server is listed in the blacklist. How to unblock it quickly?
skimage学习(2)——RGB转灰度、RGB 转 HSV、直方图匹配
Skimage learning (1)
Seaborn数据可视化
如何在软件研发阶段落地安全实践
专精特新软件开发类企业实力指数发布,麒麟信安荣誉登榜
如何在博客中添加Aplayer音乐播放器
First in China! Todesk integrates RTC technology into remote desktop, with clearer image quality and smoother operation
Number of exchanges in the 9th Blue Bridge Cup finals
Test case management tool recommendation
Solidity 开发环境搭建
科普达人丨一文弄懂什么是云计算?
【Seaborn】组合图表、多子图的实现
[video / audio data processing] Shanghai daoning brings you elecard download, trial and tutorial
Module VI
Shallow understanding Net core routing
AI来搞财富分配比人更公平?来自DeepMind的多人博弈游戏研究
LeetCode 1186. Delete once to get the sub array maximum and daily question