当前位置:网站首页>字符串 - 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
谢谢大家观看
边栏推荐
- Linux 安装mysql8.X超详细图文教程
- Arduino 控制的双足机器人
- Skimage learning (1)
- LeetCode 120. 三角形最小路径和 每日一题
- 【黄啊码】为什么我建议您选择go,而不选择php?
- 麒麟信安云平台全新升级!
- DAPP defi NFT LP single and dual currency liquidity mining system development details and source code
- Number of exchanges in the 9th Blue Bridge Cup finals
- [fan Tan] those stories that seem to be thinking of the company but are actually very selfish (I: building wheels)
- Flask搭建api服务
猜你喜欢
LeetCode刷题day49
麒麟信安操作系统衍生产品解决方案 | 存储多路径管理系统,有效提高数据传输可靠性
直接上干货,100%好评
Skimage learning (1)
User defined view essential knowledge, Android R & D post must ask 30+ advanced interview questions
浅浅理解.net core的路由
Leetcode brush questions day49
Seaborn data visualization
Sator launched Web3 game "satorspace" and launched hoobi
[image sensor] correlated double sampling CDs
随机推荐
浅浅理解.net core的路由
QML初学
DNS 系列(一):为什么更新了 DNS 记录不生效?
QT video transmission
LeetCode 1477. Find two subarrays with sum as the target value and no overlap
Sator launched Web3 game "satorspace" and launched hoobi
Flash build API service
LeetCode 1031. Maximum sum of two non overlapping subarrays
Direct dry goods, 100% praise
LeetCode刷题day49
蓝桥杯 决赛 异或变换 100分
【饭谈】那些看似为公司着想,实际却很自私的故事 (一:造轮子)
[Seaborn] combination chart: pairplot and jointplot
Skimage learning (3) -- gamma and log contrast adjustment, histogram equalization, coloring gray images
The server is completely broken and cannot be repaired. How to use backup to restore it into a virtual machine without damage?
PLC: automatically correct the data set noise, wash the data set | ICLR 2021 spotlight
Rpcms method of obtaining articles under the specified classification
【黄啊码】为什么我建议您选择go,而不选择php?
Shallow understanding Net core routing
Process from creation to encapsulation of custom controls in QT to toolbar (I): creation of custom controls