当前位置:网站首页>字符串 - 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
谢谢大家观看
边栏推荐
- LeetCode 1155. 掷骰子的N种方法 每日一题
- MRS离线数据分析:通过Flink作业处理OBS数据
- 麒麟信安携异构融合云金融信创解决方案亮相第十五届湖南地区金融科技交流会
- 自定义View必备知识,Android研发岗必问30+道高级面试题
- Flash build API Service - generate API documents
- QT中自定义控件的创建到封装到工具栏过程(一):自定义控件的创建
- mysql实现两个字段合并成一个字段查询
- Is AI more fair than people in the distribution of wealth? Research on multiplayer game from deepmind
- 99% 用户在 Power BI 云端报表常犯错误
- Skimage learning (3) -- gamma and log contrast adjustment, histogram equalization, coloring gray images
猜你喜欢
Sator推出Web3遊戲“Satorspace” ,並上線Huobi
【视频/音频数据处理】上海道宁为您带来Elecard下载、试用、教程
麒麟信安云平台全新升级!
QT picture background color pixel processing method
Master this promotion path and share interview materials
skimage学习(2)——RGB转灰度、RGB 转 HSV、直方图匹配
麒麟信安加入宁夏商用密码协会
DevOps 的运营和商业利益指南
QT中自定义控件的创建到封装到工具栏过程(一):自定义控件的创建
Direct dry goods, 100% praise
随机推荐
How to implement safety practice in software development stage
LeetCode 1031. 两个非重叠子数组的最大和 每日一题
【视频/音频数据处理】上海道宁为您带来Elecard下载、试用、教程
QT中自定义控件的创建到封装到工具栏过程(一):自定义控件的创建
浅浅理解.net core的路由
LeetCode 1696. 跳跃游戏 VI 每日一题
A tour of grpc:03 - proto serialization / deserialization
LeetCode 1477. Find two subarrays with sum as the target value and no overlap
LeetCode 1654. 到家的最少跳跃次数 每日一题
SIGGRAPH 2022最佳技术论文奖重磅出炉!北大陈宝权团队获荣誉提名
NeRF:DeepFake的最终替代者?
With the latest Alibaba P7 technology system, mom doesn't have to worry about me looking for a job anymore
Sator a lancé le jeu web 3 "satorspace" et a lancé huobi
防火墙系统崩溃、文件丢失的修复方法,材料成本0元
mysql使用笔记一
如何在软件研发阶段落地安全实践
Flask build API service SQL configuration file
LeetCode 1049. 最后一块石头的重量 II 每日一题
mysql官网下载:Linux的mysql8.x版本(图文详解)
Notes on installing MySQL in centos7