• 包括特殊字符串(转义字符),可以小到一个字符,也可以包含百万字符。
  • 创建之后不可改变,只能重新创建

    创建字符串

  • “ “:使用双引号创建

  • ‘ ‘:使用单引号创建
    • \xhh\ddd:翻译为ASCII码
    • \u{3b1}:翻译为UTF-8后
    • \z:与Lua5.2之后加入,忽略之后的所有空格字符,直到下一个非空格字符
    • 注:使用双引号的字符串中可以使用单引号,对单引号创建的字符串相同
  • [[ ]]:使用双中括号创建

    • 忽略第一个换行符
    • 转义字符无效
    • 在[[之间可加入=,避免与其他的等式冲突
      • 如:[===[开始,则]===]结束

        计算字符串长度:

  • 计算字符长度

    连接字符:..

  • 连接两个字符

    • 连接时,lua会创建一个新字符串
    • 如果是数字,则在数字和..之间需要加上一个空格,否则第一个.会被认为是小数点
      • 如:1..2 → 报错;1 .. 2 → 输出12

        字符串转整形:tonumber()

  • tobumber(str[,type]):返回字符串整形浮点型无法转换返回nil

    • str:字符串
    • type:可选,str的进制数,范围为2~32

      整形转字符串:tostring()

  • tostring(num):返回整形num转换为字符串

    string.len():求长度

  • string.len(str)获得字符串长度

    string.rep():重复n次

  • string.rep(str,num):返回重复str字符n次的结果

    • str:要重复的字段
    • num:重复的次数

      string.reverse():颠倒

  • string.reverse(str):返回颠倒后的字符串

    string.lower():转小写

  • string.lower(str)返回字符串的小写形式

    string.upper():转大写

  • string.upper(str)返回字符串的大写形式

    string.sub():截取子串

  • string.sub(myString,start[,end])返回指定字符串的子串(字符串从1开始计数

    • start:子串开始位置,可设定为负数
      • 设置为负数则从字符串最后开始计算
    • end:可选参数,子串结束位置,可省略
      • 省略时,默认为截取到字符串结尾

        string.char():ASCII转字符

  • string.char(n1,n2,…):根据ASCII码返回对应的一个或多个字符

    • 多个参数时,返回的是连接多个ASCII码的字符串

      string.byte():字符转ASCII

  • string.byte(str[,option1,option2]):字符转换为ASCII码

    • str:字符串
    • option1:可选字符1,选择返回字符串中第几个字符的ASCII码
      • 省略,则默认返回第一个
    • option2:可选字符2,选择返回字符串连续的的ASCII码的结尾
      • 注:使用{string.byte(s, 1, -1)},返回的则是一个字段s的ASCII码列表 ```lua print(string.byte(“abc”)) —输出:97 print(string.byte(“abc”, 1)) —输出:97 print(string.byte(“abc”, 2)) —输出:98 print(string.byte(“abc”, 1, 2)) —输出:97 98
  1. <a name="qYBTd"></a>
  2. # string.format():格式化字符串
  3. - **string.format(str,n1,n2,...)**:**返回格式化输出的指定字符串,可以用于连接两个字符串**
  4. - **str**:要格式化的**目标字符串**(在" "中)
  5. - **后续参数**:任意多个,用于**填充**第一个参数中的**格式控制符**
  6. - 可用于**连接字符串**,**输出指定位数的小数**
  7. ```lua
  8. gString1="hello"
  9. gString2="world"
  10. for index=1,3 do
  11. gString1 = string.format("%s %s",gString1,gString2) --用于拼接字符串
  12. end
  13. print(gString1) --输出:hello world world world
  14. --------------------------------------------------------------------------
  15. gMyname="Fred"
  16. gMyStr=16
  17. myString=string.format("%s%s%d%s",gMyname,"'s strength is ",gMyStr,".")
  18. print(myString) --输出:Fred's strength is 16.
  19. --------------------------------------------------------------------------
  20. gNumber=3.1415926
  21. myString=string.format("%.2f",gNumber) --保留2位输出浮点数
  22. print(myString) --输出:3.14
  23. gNumber=3.1415926
  24. myString=string.format("%06.2f",gNumber) --保留2位输出浮点数,使用0填充
  25. print(myString) --输出:003.14

string.find():全局搜索字符串

  • string.find(str,findStr,[init][,plain]):在str中搜索子串findStr的匹配模式,并返回开始和结束位置;如果子串不存在,则返回nil
    • str:主串
    • findStr:要查找的目标字符串(设置为(findStr)则返回第三个参数
    • 可选参数:
      • init:指定开始查找的位置默认为1,可为代表从后往前
      • plain:是否关闭匹配模式(默认为false:开启;true:关闭)
        • 关闭匹配模式:无法使用格式化字符进行查找
  • 返回结果:返回两个参数
    • 第一个参数:目标字符串的开始位置
    • 第二个参数:目标字符串的结束位置
    • 第三个参数:findString必须是”()”格式才会返回
      • 返回查找到的结果,如果要查找()则要使用%(%)
    • 主串中不含有子串,则返回nil ```lua gString=”This is cold day” gStart,gEnd=string.find(gString,”hello”) print(gStart,gEnd) —输出:nil nil gStart,gEnd=string.find(gString,”cold”) print(gStart,gEnd) —输出:9 12

gString=”This is 13 day” —开启匹配模式,查找第一个%d%d所在位置,findString不使用() gStart,gEnd,gFind=string.find(gString,”%d%d”,1,false)
print(gStart,gEnd,gFind) —输出:9 10 nil

—开启匹配模式,查找第一个%d%d所在位置,findString使用() gStart,gEnd,gFind=string.find(gString,”(%d%d)”,1,false)
print(gStart,gEnd,gFind) —输出:9 10 13

—关闭匹配模式,查找第一个%d%d所在位置,findString使用() gStart,gEnd,gFind=string.find(gString,”(%d%d)”,1,true)
print(gStart,gEnd,gFind) —输出:nil nil nil(关闭匹配模式,则在查找子串%d%d的位置)

<a name="Yhw3W"></a>
# string.match():返回匹配的字符串

- **string.match(sourceString,findStr,init)**:**返回**和**findStr相匹配**的**完整字符串**,该函数在findStr**为搜索模式时**才有意义
   - sourceString:原字符串
   - findStr:要匹配的字符串,或匹配模式
   - init:从哪个位置开始搜索
```lua
str = "this is a good day"
print(string.match(str, "oo"))    --输出:oo

str = "Today is 17/7/1990"
print(str:match("%d+/%d+/%d+"))    --输出:17/7/1990

string.gsub():匹配替换

  • string.gsub(sourceString,pattern,replacementString[,n])返回替换后字符串,和替换次数
    • sourceString:原字符串
    • pattern:要替换的字符串格式
    • replacementString:将要替换成的目标字符串
    • n:可选参数,指定替换次数,默认为全部替换
  • 返回两个参数
    • 第一个参数:替换过后的字符串
    • 第二个参数:替换字符串格式的个数

string.gmatch():返回全部满足模式

  • string.gmatch(sourceStr,findStr)返回函数,可以通过该函数遍历所有原字符串满足模式的单词
    • sourceStr:原字符串
    • findStr:要匹配的字符串,或匹配模式 ```lua str = “this is a good day” word = {} for i in string.gmatch(str, “%a+”) do word[#word + 1] = i end

print(table.unpack(word)) —输出:this is a good day

<a name="l5jS8"></a>
# 
<a name="yVqdw"></a>
# 简便调用字符库:str:upper()

- 在字符串后使用:,再加上方法名,可以直接调处理字符的方法
```lua
str = "123456"
print(str:sub(1, 3))    --输出:123