当前位置:网站首页>字符串 - 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
谢谢大家观看
边栏推荐
- 【视频/音频数据处理】上海道宁为您带来Elecard下载、试用、教程
- 自定义View必备知识,Android研发岗必问30+道高级面试题
- 【Seaborn】组合图表:PairPlot和JointPlot
- MRS离线数据分析:通过Flink作业处理OBS数据
- 麒麟信安携异构融合云金融信创解决方案亮相第十五届湖南地区金融科技交流会
- Seaborn数据可视化
- Blue Bridge Cup final XOR conversion 100 points
- 让保险更“保险”!麒麟信安一云多芯云桌面中标中国人寿, 助力金融保险信息技术创新发展
- The computer cannot add a domain, and the Ping domain name is displayed as the public IP. What is the problem? How to solve it?
- Notes on installing MySQL in centos7
猜你喜欢
Shallow understanding Net core routing
Leetcode brush questions day49
QT中自定义控件的创建到封装到工具栏过程(一):自定义控件的创建
Sator a lancé le jeu web 3 "satorspace" et a lancé huobi
Matplotlib绘图界面设置
Mrs offline data analysis: process OBS data through Flink job
Module VI
麒麟信安操作系统衍生产品解决方案 | 存储多路径管理系统,有效提高数据传输可靠性
如何在博客中添加Aplayer音乐播放器
麒麟信安中标国网新一代调度项目!
随机推荐
LeetCode 1696. Jumping game VI daily question
[source code interpretation] | source code interpretation of livelistenerbus
第九届 蓝桥杯 决赛 交换次数
DNS 系列(一):为什么更新了 DNS 记录不生效?
Skimage learning (1)
麒麟信安云平台全新升级!
【视频/音频数据处理】上海道宁为您带来Elecard下载、试用、教程
【饭谈】如何设计好一款测试平台?
DNS series (I): why does the updated DNS record not take effect?
Leetcode brush questions day49
LeetCode 1626. 无矛盾的最佳球队 每日一题
SlashData开发者工具榜首等你而定!!!
QML beginner
Sator推出Web3游戏“Satorspace” ,并上线Huobi
QT中自定义控件的创建到封装到工具栏过程(一):自定义控件的创建
《产品经理必读:五种经典的创新思维模型》的读后感
What is cloud computing?
【饭谈】Web3.0到来后,测试人员该何去何从?(十条预言和建议)
Flask搭建api服务-SQL配置文件
防火墙系统崩溃、文件丢失的修复方法,材料成本0元