• 字符串 - string(Lua)


    字符串

    string 是 Lua 中八大数据类型之一,Lua 中没有字符的概念,所有的文本都是 string。Lua 中的string 是以 8个比特 来储存的。

    Lua中的字符串与大多数语言字符串一样都是不可变量。所有改变string的操作,都是生成新的string。Lua中string数据结构使用的是哈希算法实现的字符串池。这样的做法是为了保证内存不泄露,且字符串比较时大大提高性能。


    表示方法
    string有两种表示方法

    • ’ 单引号 如 's'
    • " 双引号 如 "s"

    它们都是表示字符串常量的方式,建议使用一种即可,不要混用。


    长字符串
    string可以使用 [[ ]]这样的方式来表示多行长字符串的书写

    local s = [[
    L
    u
    a]]
    
    • 1
    • 2
    • 3
    • 4

    转义字符

    转义字符意义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
    \ddd1到3位八进制数所代表的任意字符三位八进制
    \xhh1到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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    Lua还提供的utf8.charutf8.codepoint 两种处理函数字符编码转换为字符串和字符串转换为数字
    这与string的string.charstring.byte类似


    强制类型转换

    在使用算术运算符时,如果操作的是字符串,Lua会尝试将string类型变为浮点数

    print("2" * 2) --4.0
    print("2" * "2") --4.0
    
    • 1
    • 2

    同理,使用的是字符串连接符..,如果操作的是number,Lua会尝试将number类型将转换为字符串

    print("20" .. 22) --2022
    print(20 .. 22) --2022
    
    • 1
    • 2

    谢谢大家观看

  • 相关阅读:
    OpenHarmony3.0如何轻松连接华为云IoT设备接入平台?
    【数据结构与算法】图的介绍和程序实现(含深度优先遍历、广度优先遍历)
    Word控件Spire.Doc 【图像形状】教程(12) 如何在C#中旋转word文档上的形状
    进程与线程
    隐式意图和Activity启动模式:实现文件打开应用【Android、隐式意图】
    数据结构与算法之排序: 侏儒排序 (Typescript版)
    华为云大数据平台,助力企业数字化转型成效明显
    渗透测试练习题解析 4(CTF web)
    jeecgboot 使用阿里图标库
    drone ci 是什么
  • 原文地址:https://blog.csdn.net/m0_52361859/article/details/125608255