- 包括特殊字符串(转义字符),可以小到一个字符,也可以包含百万字符。
-
创建字符串
“ “:使用双引号创建
- ‘ ‘:使用单引号创建
- \xhh和\ddd:翻译为ASCII码
- \u{3b1}:翻译为UTF-8后
- \z:与Lua5.2之后加入,忽略之后的所有空格字符,直到下一个非空格字符
- 注:使用双引号的字符串中可以使用单引号,对单引号创建的字符串相同
[[ ]]:使用双中括号创建
-
连接字符:..
连接两个字符
tobumber(str[,type]):返回字符串转换为整形或浮点型,无法转换返回nil
-
string.len():求长度
-
string.rep():重复n次
string.rep(str,num):返回重复str字符n次的结果
-
string.lower():转小写
-
string.upper():转大写
-
string.sub():截取子串
string.sub(myString,start[,end]):返回指定字符串的子串(字符串从1开始计数)
string.char(n1,n2,…):根据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
<a name="qYBTd"></a>
# string.format():格式化字符串
- **string.format(str,n1,n2,...)**:**返回格式化输出的指定字符串,可以用于连接两个字符串**
- **str**:要格式化的**目标字符串**(在" "中)
- **后续参数**:任意多个,用于**填充**第一个参数中的**格式控制符**
- 可用于**连接字符串**,**输出指定位数的小数**
```lua
gString1="hello"
gString2="world"
for index=1,3 do
gString1 = string.format("%s %s",gString1,gString2) --用于拼接字符串
end
print(gString1) --输出:hello world world world
--------------------------------------------------------------------------
gMyname="Fred"
gMyStr=16
myString=string.format("%s%s%d%s",gMyname,"'s strength is ",gMyStr,".")
print(myString) --输出:Fred's strength is 16.
--------------------------------------------------------------------------
gNumber=3.1415926
myString=string.format("%.2f",gNumber) --保留2位输出浮点数
print(myString) --输出:3.14
gNumber=3.1415926
myString=string.format("%06.2f",gNumber) --保留2位输出浮点数,使用0填充
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