当前位置:网站首页>字符串 - 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
谢谢大家观看
边栏推荐
- QT视频传输
- 测试用例管理工具推荐
- PLC:自动纠正数据集噪声,来洗洗数据集吧 | ICLR 2021 Spotlight
- SlashData开发者工具榜首等你而定!!!
- LeetCode 1981. Minimize the difference between the target value and the selected element one question per day
- Skimage learning (2) -- RGB to grayscale, RGB to HSV, histogram matching
- [fan Tan] after the arrival of Web3.0, where should testers go? (ten predictions and suggestions)
- QT video transmission
- QML beginner
- LeetCode 1774. 最接近目标价格的甜点成本 每日一题
猜你喜欢

Skimage learning (3) -- gamma and log contrast adjustment, histogram equalization, coloring gray images

Nerf: the ultimate replacement for deepfake?

The process of creating custom controls in QT to encapsulating them into toolbars (II): encapsulating custom controls into toolbars

Pychart ide Download

科普达人丨一文弄懂什么是云计算?

How to choose the appropriate automated testing tools?

Master this promotion path and share interview materials

A tour of gRPC:03 - proto序列化/反序列化

麒麟信安云平台全新升级!

Mrs offline data analysis: process OBS data through Flink job
随机推荐
skimage学习(2)——RGB转灰度、RGB 转 HSV、直方图匹配
麒麟信安操作系统衍生产品解决方案 | 存储多路径管理系统,有效提高数据传输可靠性
dapp丨defi丨nft丨lp单双币流动性挖矿系统开发详细说明及源码
Skimage learning (3) -- gamma and log contrast adjustment, histogram equalization, coloring gray images
LeetCode 1981. Minimize the difference between the target value and the selected element one question per day
【视频/音频数据处理】上海道宁为您带来Elecard下载、试用、教程
Leetcode brush questions day49
电脑无法加域,ping域名显示为公网IP,这是什么问题?怎么解决?
如何在软件研发阶段落地安全实践
QT 图片背景色像素处理法
LeetCode 1155. 掷骰子的N种方法 每日一题
skimage学习(3)——使灰度滤镜适应 RGB 图像、免疫组化染色分离颜色、过滤区域最大值
Solidity 开发环境搭建
Mrs offline data analysis: process OBS data through Flink job
Proxmox VE重装后,如何无损挂载原有的数据盘?
LeetCode 1696. 跳跃游戏 VI 每日一题
Sator推出Web3游戏“Satorspace” ,并上线Huobi
QT中自定义控件的创建到封装到工具栏过程(一):自定义控件的创建
DNS 系列(一):为什么更新了 DNS 记录不生效?
LeetCode 1774. The dessert cost closest to the target price is one question per day