收藏 分享(赏)

lua脚本精灵string.format()函数的用法.doc

上传人:buyk185 文档编号:6102761 上传时间:2019-03-27 格式:DOC 页数:19 大小:157.50KB
下载 相关 举报
lua脚本精灵string.format()函数的用法.doc_第1页
第1页 / 共19页
lua脚本精灵string.format()函数的用法.doc_第2页
第2页 / 共19页
lua脚本精灵string.format()函数的用法.doc_第3页
第3页 / 共19页
lua脚本精灵string.format()函数的用法.doc_第4页
第4页 / 共19页
lua脚本精灵string.format()函数的用法.doc_第5页
第5页 / 共19页
点击查看更多>>
资源描述

1、string.format()函数的用法lua 中有很多字符串操作的函数,string.format() 就是其中的一个,顾名思义,format 是格式化的意思,则 string.format()功能就是格式化一个字符串。我们知道 lua 中可以用 “连接字符串,可以起到一部分格式化字符串的作用,但是如果字符串较长或者有特殊的格式转换操作(如十六进制转换),用“就会很繁琐且可读性差。用 string.format()就是一个很好的解决方案。函数定义string.format() 第一个参数为字符串格式,后面的参数可以任意多个,用于填充第一个参数中的格式控制符,最后返回完整的格式化后的字符串。格

2、式控制符以%开头,常用的有以下几种 %s - 接受一个字符串并按照给定的参数格式化该字符串%d - 接受一个数字并将其转化为有符号的整数格式%f - 接受一个数字并将其转化为浮点数格式(小数),默认保留 6 位小数,不足位用 0 填充%x - 接受一个数字并将其转化为小写的十六进制格式%X - 接受一个数字并将其转化为大写的十六进制格式示例:1. str = string.format(“字符串:%sn 整数:%dn 小数:%fn十六进制数:%X“,“qweqwe“,1,0.13,348)2. print(str)输出结果:1. 字符串:qweqwe2. 整数:13. 小数:0.1300004

3、. 十六进制数:15C5.%X 的特殊用法%08X 中间的第 2 个数字格式化成多少位,第 1 个数字表示不足位数时的填充数,通常用 0 填充。例如:1. str = string.format(“0x%08X“,348)2. print(str)前面的 0x 只是个普通的字符串,可有可无,因为我们一般在十六进制数前面加上 0x 来表明这是一个十六进制数,所以这里才加了个 0x,没有其他特殊意义。输出结果:1. 0x0000015C%x 的特殊用法与%X 一样%f 的特殊用法%0.3f 中的小数点右边的数字表示小数点后面保留多少位,小数点前面的数字表示位数不足时的填充数,通用用 0 填充。例如

4、:格式化一个小数,保留 2 位小数1. str = string.format(“%0.2f“,34.2344)2. print(str)输出结果:1. 34.23更多用法前面是常用的格式控制符,string.format() 还有很多其他的格式控制符,更详细的信息可以参考官方文档。%c - 接受一个数字, 并将其转化为 ASCII 码表中对应的字符%d, %i - 接受一个数字并将其转化为有符号的整数格式%o - 接受一个数字并将其转化为八进制数格式%u - 接受一个数字并将其转化为无符号整数格式%x - 接受一个数字并将其转化为十六进制数格式, 使用小写字母%X - 接受一个数字并将其转化

5、为十六进制数格式, 使用大写字母%e - 接受一个数字并将其转化为科学记数法格式, 使用小写字母 e%E - 接受一个数字并将其转化为科学记数法格式 , 使用大写字母 E%f - 接受一个数字并将其转化为浮点数格式%g(%G) - 接受一个数字并将其转化为%e(%E, 对应%G)及%f 中较短的一种格式%q - 接受一个字符串并将其转化为可安全被 Lua 编译器读入的格式%s - 接受一个字符串并按照给定的参数格式化该字符串为进一步细化格式, 可以在 %号后添加参数. 参数将以如下的顺序读入 :(1) 符号: 一个+号表示其后的数字转义符将让正数显示正号. 默认情况下只有负数显示符号.(2)

6、占位符: 一个 0, 在后面指定了字串宽度时占位用. 不填时的默认占位符是空格.(3) 对齐标识: 在指定了字串宽度时, 默认为右对齐, 增加-号可以改为左对齐.(4) 宽度数值(5) 小数位数/字串裁切: 在宽度数值后增加的小数部分 n, 若后接 f(浮点数转义符, 如%6.3f) 则设定该浮点数的小数只保留 n 位, 若后接 s(字符串转义符, 如%5.3s)则设定该字符串只显示前 n 位.在这些参数的后面则是上述所列的转义码类型(c, d, i, f, .).1. print(string.format(“pi = %.4f“, PI)2. pi = 3.14163. d = 5; m

7、= 11; y = 19904. print(string.format(“%02d/%02d/%04d“, d, m, y)5. 05/11/19906. tag, title = “h1“, “a title“7. print(string.format(“%s“, tag, title, tag)8. a title第一个例子,%.4f 代表小数点后面有 4 位小数的浮点数。第二个例子 %02d代表以固定的两位显示十进制数,不足的前面补 0。而%2d 前面没有指定 0,不足两位时会以空白补足。对于格式串部分指示符得详细描述清参考 lua 手册,或者参考 C 手册,因为 Lua 调用标准

8、C 的 printf 函数来实现最终的功能。以下是一些例子:1. string.format(“%c: %c“, 83) 输出 S2. string.format(“%+d“, 17.0) 输出+173. string.format(“%05d“, 17) 输出 000174. string.format(“%o“, 17) 输出 215. string.format(“%u“, 3.14) 输出 36. string.format(“%x“, 13) 输出 d7. string.format(“%X“, 13) 输出 D8. string.format(“%e“, 1000) 输出1.000

9、000e+039. string.format(“%E“, 1000) 输出1.000000E+0310.string.format(“%6.3f“, 13) 输出 13.00011.string.format(“%q“, “OnenTwo“) 输出“One12. Two“13.string.format(“%s“, “monkey“) 输出 monkey14.string.format(“%10s“, “monkey“) 输出 monkey15.string.format(“%5.3s“, “monkey“) 输出mon%a abbreviated weekday name (e.g., W

10、ed)%A full weekday name (e.g., Wednesday)%b abbreviated month name (e.g., Sep)%B full month name (e.g., September)%c date and time (e.g., 09/16/98 23:48:10)%d day of the month (16) 01-31%H hour, using a 24-hour clock (23) 00-23%I hour, using a 12-hour clock (11) 01-12%M minute (48) 00-59%m month (09

11、) 01-12%p either “am“ or “pm“ (pm)%S second (10) 00-61%w weekday (3) 0-6 = Sunday-Saturday%x date (e.g., 09/16/98)%X time (e.g., 23:48:10)%Y full year (1998)%y two-digit year (98) 00-99% the character %一、时间的三种格式1、用数值表示时间值 用数字值来表示时间值,实际上时间值的本质就是一个数字值。例如:d = 1131286477 这里的 1131286477 是一个以秒为单位的 格林威志时间(

12、gmt),注意不同时区的时差2、用字符串表示时间 用字符串来来表示时间。例如:d = “2005-11-06 22:18:30“ -2005年11月6日 22点18分30 秒d = “11/06/2005 22:18:30“ -即2005 年11月 6日 22点18 分30秒3、时间的列表格式 用table对象来表示时间例如:d = year=2005, month=11, day=6, hour=22,min=18,sec=30,isdst=false-同样表示2005 年11月6日 22点18 分30秒,其中isdst=false表示不使用夏令时我们可以这样访问时间列表 d.year =

13、2005;二、取得数值(number)格式的时间值time = os.time() 返回一个标准的number(数值)格式的时间值,这也是最原始的时间值os.time()返回的时间是以秒为单位的。1、获取当前时间数值time = os.time(); -如果没有指定任何参数,则返回当前时间2、通过table参数指定时间,获取指定的时间数值time = os.time(tab);通过一个table参数,指定一个时间,返回时间的数值格式.例如:local tab = year=2005, month=11, day=6, hour=22,min=18,sec=30,isdst=false-year

14、表示年,month 表示月 ,day表示日期,hour表示小时,min表示分钟,sec 表示秒 ,isdst表示是否夏令时 time = os.time(tab) 返回值为1131286710三、取得列表(table)格式的时间tab = os.date(“*t“,time) 可以将一个数值格式的时间转换为字符串或者列表其中第一个参数指定返回的格式,如果第一个参数指定为“*t“ 则返回一个table格式的时间。第二个参数指定一个时间数值(以秒为单位)1、获取当前时间的table格式tab = os.date(“*t“)如果不指定os.date 的第二个参数,则返回当前时间的table表示格式2

15、、通过时间数值,获取指定时间的table 格式tab = os.date(“*t“, time)通过os.date 函数的第二个参数指定一个时间数值。例如:local tab = os.date(“*t“, 1131286710);-返回值 tab 的数据 year=2005, month=11, day=6, hour=22,min=18,sec=30-year表示年,month 表示月 ,day表示日期,hour表示小时,min表示分钟,sec 表示秒 ,isdst表示是否夏令时 -tab成包括一些其他的成员 tab.yday 表示一年中的第几天 tab.wday 表示星期几(星期天为1)

16、time = os.time(tab) 返回值为1131286710四、取得时间的字符串(string)格式tab = os.date(format,time)实际上与取得table格式的时间一样,同样是使用os.date参数,不同的是第一个参数如果第一个参数不是“*t“ os.date返回字符串关于format 参数使用的格式化语法,请参考: string.ftime格式化语法 os.date 的用法与 string.ftime 完全相同例如:win.consoleOpen()print( os.date(“today is %A, in %B“) )print( os.date(“%x“,

17、 906000490) )-输出类似这样的字符串 09/16/19981、获取当前时间的字符串(string)格式如果不指定os.date 的第二个参数,则返回当前时间的table表示格式例如:str= os.date(“*x“)2、通过时间数值,获取指定时间的(string)格式通过os.date 函数的第二个参数指定一个时间数值。例如:str= os.date(“*x“,1131286710)3、获取时间的指定部份的(string)格式例如:str = os.date(“%M“) -返回当前时间分钟部份的字符串格式五、时间数值与字符串之间的转换请参考: string.time string

18、.ftime 函数用法六、计算时间值间隔int = os.difftime(t2,t1);t2,t1都是数值格式的时间值,返回值也是一个数值表示间隔的时间。参数以及返回的时间值都是以秒为单位的数值格式。local tab = year=2005, month=11, day=6, hour=22,min=18,sec=30,isdst=falset1 = os.time(tab)tab.day = tab.day +1;-前进一天t2 = os.time(tab)int = os.difftime(t2,t1);win.messageBox(int“秒“,“时间差“七、系统时钟int = os

19、.tick();读取系统时钟,以毫秒为单位。表示从系统启动到当前时刻所过去的毫秒数。int = os.clock()读取系统时钟,以秒为单位。表示从系统启动到当前时刻所过去的秒数。注意 因为内部实现的差异,os.tick 与 os.clock()的返回值并不完全一致。lua math库 (2012-05-18 17:26:28)转载标签: 游戏分类: Lua正文开始atan2、sinh、cosh、tanh这4个应该用不到。函数名 描述 示例 结果pi 圆周率 math.pi 3.1415926535898abs 取绝对值 math.abs(-2012) 2012ceil 向上取整 math.c

20、eil(9.1) 10floor 向下取整 math.floor(9.9) 9max 取参数最大值 math.max(2,4,6,8) 8min 取参数最小值 math.min(2,4,6,8) 2pow 计算x 的 y次幂 math.pow(2,16) 65536sqrt 开平方 math.sqrt(65536) 256mod 取模 math.mod(65535,2) 1modf 取整数和小数部分 math.modf(20.12) 20 0.12randomseed 设随机数种子 math.randomseed(os.time() random 取随机数 math.random(5,90)

21、590rad 角度转弧度 math.rad(180) 3.1415926535898deg 弧度转角度 math.deg(math.pi) 180exp e的 x次方 math.exp(4) 54.598150033144log 计算x 的自然对数 math.log(54.598150033144) 4log10 计算10为底, x的对数 math.log10(1000) 3frexp 将参数拆成x * (2 y)的形式 math.frexp(160) 0.625 8ldexp 计算x * (2 y) math.ldexp(0.625,8) 160sin 正弦 math.sin(math.ra

22、d(30) 0.5cos 余弦 math.cos(math.rad(60) 0.5tan 正切 math.tan(math.rad(45) 1asin 反正弦 math.deg(math.asin(0.5) 30acos 反余弦 math.deg(math.acos(0.5) 60atan 反正切 math.deg(math.atan(1) 45lua string 库 (2012-09-12 09:25:53)转载标签: 杂谈正文开始-lua中字符串索引从前往后是1,2,,从后往前是-1,-2。-string库中所有的function都不会直接操作字符串,只返回一个结果。-【基本函数】函数

23、描述 示例 结果len 计算字符串长度 string.len(“abcd“) 4rep 返回字符串s的n个拷贝 string.rep(“abcd“,2) abcdabcdlower 返回字符串全部字母大写 string.lower(“AbcD“) abcdupper 返回字符串全部字母小写 string.upper(“AbcD“) ABCDformat 返回一个类似printf的格式化字符串 string.format(“the value is:%d“,4) the value is:4string.sub(“abcd“,2) bcdstring.sub(“abcd“,-2) cdstrin

24、g.sub(“abcd“,2,-2) bcsubreturns substring from index i to j of sstring.sub(“abcd“,2,3) bcstring.find(“cdcdcdcd“,“ab“) nilstring.find(“cdcdcdcd“,“cd“) 1 2find 在字符串中查找string.find(“cdcdcdcd“,“cd“,7) 7 8string.gsub(“abcdabcd“,“a“,“z“); zbcdzbcd 2gsub 在字符串中替换string.gsub(“aaaa“,“a“,“z“,3); zzza 3byte 返回字符

25、的整数形式 string.byte(“ABCD“,4) 68char 将整型数字转成字符并连接 string.char(97,98,99,100) abcd-【基本模式串】字符类 描述 示例 结果. 任意字符 string.find(“,“.“) nil%s 空白符 string.find(“ab cd“,“%s%s“) 3 4%S 非空白符 string.find(“ab cd“,“%S%S“) 1 2%p 标点字符 string.find(“ab,.cd“,“%p%p“) 3 4%P 非标点字符 string.find(“ab,.cd“,“%P%P“) 1 2%c 控制字符 string.

26、find(“abcdtn“,“%c%c“) 5 6%C 非控制字符 string.find(“tnabcd“,“%C%C“) 3 4%d 数字 string.find(“abcd12“,“%d%d“) 5 6%D 非数字 string.find(“12abcd“,“%D%D“) 3 4%x 十六进制数字 string.find(“efgh“,“%x%x“) 1 2%X 非十六进制数字 string.find(“efgh“,“%X%X“) 3 4%a 字母 string.find(“AB12“,“%a%a“) 1 2%A 非字母 string.find(“AB12“,“%A%A“) 3 4%l

27、小写字母 string.find(“ABab“,“%l%l“) 3 4%L 大写字母 string.find(“ABab“,“%L%L“) 1 2%u 大写字母 string.find(“ABab“,“%u%u“) 1 2%U 非大写字母 string.find(“ABab“,“%U%U“) 3 4%w 字母和数字 string.find(“a1()“,“%w%w“) 1 2%W 非字母非数字 string.find(“a1()“,“%W%W“) 3 4-【转义字符%】字符类 描述 示例 结果string.find(“abc%“,“%“) 4 4% 转义字符string.find(“abcd“

28、,“%.%.“) 4 5-【用创建字符集,“-“为连字符,“表示字符集的补集】字符类 描述 示例 结果01 匹配二进制数 string.find(“32123“,“01“) 3 3ABCD 匹配AC、AD、BC、BD string.find(“ABCDEF“,“ABCD“) 2 3 匹配一对方括号 string.find(“ABCD“,“) 4 51-3 匹配数字1-3 string.find(“312“,“1-31-31-3“) 1 3b-d 匹配字母b-d string.find(“dbc“,“b-db-db-d“) 1 3%s 匹配任意非空字符 string.find(“ a “,“%s

29、“) 3 3%d 匹配任意非数字字符 string.find(“123a“,“%d“) 4 4%a 匹配任意非字母字符 string.find(“abc1“,“%a“) 4 4-【用“()“进行捕获】字符类 描述 示例 结果string.find(“12ab“,“(%a%a)“) 3 4 ab() 捕获字符串string.find(“ab12“,“(%d%d)“) 3 4 12-【模式修饰符】修饰符 描述 示例 结果string.find(“aaabbb“,“(a+b)“) 1 4 aaab+ 表示1个或多个,匹配最多个string.find(“cccbbb“,“(a+b)“) nilstri

30、ng.find(“zzxyyy“,“(xy-)“) 3 3 x- 表示0个或多个,匹配最少个string.find(“zzzyyy“,“(x-y)“) 4 4 ystring.find(“mmmnnn“,“(m*n)“) 1 4 mmmb* 表示0个或多个,匹配最多个string.find(“lllnnn“,“(m*n)“) 4 4 nstring.find(“aaabbb“,“(a?b)“) 3 4 ab? 表示0个或 1个string.find(“cccbbb“,“(a?b)“) 4 4 b正文结束table.insert(table, pos, value) table.remove(t

31、able, pos) table.concat(table, sep, i, j) table.sort(table, comp)Lua中的table函数库一部分的table 函数只对其数组部分产生影响, 而另一部分则对整个table均产生影响 . 下面会分开说明. table.concat(table, sep, start, end)concat是concatenate(连锁, 连接) 的缩写. table.concat()函数列出参数中指定table的数组部分从start位置到end位置的所有元素, 元素间以指定的分隔符(sep)隔开。除了table外, 其他的参数都不是必须的, 分隔符

32、的默认值是空字符, start的默认值是1, end的默认值是数组部分的总长.sep, start, end这三个参数是顺序读入的, 所以虽然它们都不是必须参数, 但如果要指定靠后的参数, 必须同时指定前面的参数. tbl = “alpha“, “beta“, “gamma“ print(table.concat(tbl, “:“) alpha:beta:gamma print(table.concat(tbl, nil, 1, 2) alphabeta print(table.concat(tbl, “n“, 2, 3) beta gamma table.insert(table, pos,

33、 value)table.insert()函数在table 的数组部分指定位置(pos)插入值为value的一个元素. pos参数可选, 默认为数组部分末尾 . tbl = “alpha“, “beta“, “gamma“ table.insert(tbl, “delta“) table.insert(tbl, “epsilon“) print(table.concat(tbl, “, “) alpha, beta, gamma, delta, epsilon table.insert(tbl, 3, “zeta“) print(table.concat(tbl, “, “) alpha, b

34、eta, zeta, gamma, delta, epsilontable.maxn(table)table.maxn()函数返回指定table中所有正数key值中最大的key值. 如果不存在key值为正数的元素, 则返回0. 此函数不限于table的数组部分. tbl = 1 = “a“, 2 = “b“, 3 = “c“, 26 = “z“ print(#tbl)3 - 因为26 和之前的数字不连续, 所以不算在数组部分内 print(table.maxn(tbl)26 tbl91.32 = true print(table.maxn(tbl)91.32table.remove(table

35、, pos)table.remove()函数删除并返回table数组部分位于 pos位置的元素. 其后的元素会被前移. pos参数可选, 默认为table长度, 即从最后一个元素删起.table.sort(table, comp)table.sort()函数对给定的table进行升序排序. tbl = “alpha“, “beta“, “gamma“, “delta“ table.sort(tbl) print(table.concat(tbl, “, “) alpha, beta, delta, gammacomp是一个可选的参数, 此参数是一个外部函数, 可以用来自定义sort函数的排序标准.此函数应满足以下条件: 接受两个参数( 依次为a, b), 并返回一个布尔型的值, 当a应该排在b前面时, 返回true, 反之返回false.例如, 当我们需要降序排序时, 可以这样写: sortFunc = function(a, b) return b table.sort(tbl, sortFunc) print(table.concat(tbl, “, “)gamma, delta, beta, alpha

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 中等教育 > 小学课件

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报