《工具抄录》 Lua之String库


所有的转义字符和所对应的意义:

转义字符 意义 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位十六进制所代表的任意字符 二位十六进制

字符串操作:

Api 意义 示例
string.upper(argument) 字符串全部转为大写字母
string.lower(argument) 字符串全部转为小写字母
string.gsub(mainString,findString,replaceString,num) 在字符串中替换,mainString 为要操作的字符串, findString 为被替换的字符,replaceString 要替换的字符,num 替换次数(可以忽略,则全部替换) string.gsub("aaaa","a","z",3);=>zzza 3
string.find (str, substr, [init, [end]]) 在一个指定的目标字符串中搜索指定的内容(第三个参数为索引),返回其具体位置。不存在则返回 nil string.find("Hello Lua user", "Lua", 1) =>7 9
string.reverse(arg) 字符串反转 string.reverse("Lua")=>auL
string.format(...) 返回一个类似printf的格式化字符串 string.format("the value is:%d",4)=>the value is:4
string.char(arg) 和 string.byte(arg[,int]) char 将整型数字转成字符并连接, byte 转换字符为整数值(可以指定某个字符,默认第一个字符) string.char(97,98,99,100)=>abcd;string.byte("ABCD",4)=>68;string.byte("ABCD")=>65
string.len(arg) 计算字符串长度 string.len("abc")=>3
string.rep(string, n) 返回字符串string的n个拷贝 string.rep("abcd",2)=>abcdabcd
.. 链接两个字符串 print("www.runoob.".."com")=>www.runoob.com
string.gmatch(str, pattern) 回一个迭代器函数,每一次调用这个函数,返回一个在字符串 str 找到的下一个符合 pattern 描述的子串。如果参数 pattern 描述的字符串没有找到,迭代函数返回nil for word in string.gmatch("Hello Lua user", "%a+") do print(word) end=>Hello,Lua,user
string.match(str, pattern, init) string.match()只寻找源字串str中的第一个配对. 参数init可选, 指定搜寻过程的起点, 默认为1。在成功配对时, 函数将返回配对表达式中的所有捕获结果; 如果没有设置捕获标记, 则返回整个配对字符串. 当没有成功的配对时, 返回nil string.match("I have 2 questions for you.", "%d+ %a+")=>2, questions;string.format("%d, %q", string.match("I have 2 questions for you.", "(%d+) (%a+)"))=>2, "questions"
string.sub(s, i [, j]) 用于截取字符串,s:要截取的字符串。i:截取开始位置。j:截取结束位置,默认为 -1,最后一个字符 local sourcestr = "prefix--runoobgoogletaobao--suffix";string.sub(sourcestr, 4, 15)=>"fix--runoobg";string.sub(sourcestr, -10)=>"ao--suffix";
string.byte 字符与整数相互转换 string.byte("Lua")=>76;string.byte("Lua",-1)=>97
string.char 字符与整数相互转换 string.char(97)=>a

字符串格式化 string.format()

Api 意义
%c 接受一个数字, 并将其转化为ASCII码表中对应的字符
%d, %i - 接受一个数字并将其转化为有符号的整数格式
%o 接受一个数字并将其转化为八进制数格式
%u 接受一个数字并将其转化为无符号整数格式
%x 接受一个数字并将其转化为十六进制数格式, 使用小写字母
%X 接受一个数字并将其转化为十六进制数格式, 使用大写字母
%e 接受一个数字并将其转化为科学记数法格式, 使用小写字母e
%E 接受一个数字并将其转化为科学记数法格式, 使用大写字母E
%f 接受一个数字并将其转化为浮点数格式
%g(%G) 接受一个数字并将其转化为%e(%E, 对应%G)及%f中较短的一种格式
%q 接受一个字符串并将其转化为可安全被Lua编译器读入的格式
%s 接受一个字符串并按照给定的参数格式化该字符串
为进一步细化格式, 可以在%号后添加参数. 参数将以如下的顺序读入:
(1) 符号: 一个+号表示其后的数字转义符将让正数显示正号. 默认情况下只有负数显示符号.
(2) 占位符: 一个0, 在后面指定了字串宽度时占位用. 不填时的默认占位符是空格.
(3) 对齐标识: 在指定了字串宽度时, 默认为右对齐, 增加-号可以改为左对齐.
(4) 宽度数值
(5) 小数位数/字串裁切: 在宽度数值后增加的小数部分n, 若后接f(浮点数转义符, 如%6.3f)则设定该浮点数的小数只保留n位, 若后接s(字符串转义符, 如%5.3s)则设定该字符串只显示前n位.

string1 = "Lua"
string2 = "Tutorial"
number1 = 10
number2 = 20
string.format("基本格式化 %s %s",string1,string2)=>基本格式化 Lua Tutorial
date = 2; month = 1; year = 2014
string.format("日期格式化 %02d/%02d/%03d", date, month, year)=>日期格式化 02/01/2014
string.format("%.4f",1/3) -- 输出0.3333
string.format("%c", 83) -- 输出S
string.format("%+d", 17.0) -- 输出+17
string.format("%05d", 17) -- 输出00017
string.format("%o", 17) -- 输出21
string.format("%u", 3.14) -- 输出3
string.format("%x", 13) -- 输出d
string.format("%X", 13) -- 输出D
string.format("%e", 1000) -- 输出1.000000e+03
string.format("%E", 1000) -- 输出1.000000E+03
string.format("%6.3f", 13) -- 输出13.000
string.format("%q", "One\nTwo") -- 输出"One
  Two
string.format("%s", "monkey") -- 输出monkey
string.format("%10s", "monkey") -- 输出 monkey
string.format("%5.3s", "monkey") -- 输出 mon

相关