
前言#
今天来看一个既熟悉又陌生的函数,这个函数是用来格式化参数的,其格式化的规则和c语言中的printf()
函数很像,但是为什么说既熟悉又陌生呢,原因就是虽然printf几乎每天都用到,但是他的格式符你却不一定搞的清楚,比如你来说说%g
和%e
的区别,说不出来了吧,接下里我们一起来看一下吧。
内容#
string.format()##
- 原型:string.format (formatstring, ···)
- 解释:返回第一个参数描述之后的参数的格式化版本,第一个参数必须为字符串,是对结果字符串的一种描述,这个格式化的字符串和C语言的
printf()
一族的函数遵循相同的规则,仅有的不同体现在参数选项的修改,其中参数描述符*,l,L,p
和h
不再支持,但是多了一个额外的选项q
,这个q
选项会以一种适合lua解释器安全读取的方式来格式化字符串:被写在双引号之间的字符串包括双引号、换行、空字符('\0'
或NULL
)、反斜杠在被格式化时都能被正确的分离出来。
Usage##
- 首先新建一个文件将文件命名为formattest.lua然后编写如下代码:
-- 打印字符串
local retstr = string.format("\ntoday is %s", os.date())
print(retstr)
-- 打印数字
retstr = string.format("\nmy age is %d", 22)
print(retstr)
-- 使用科学计数法表示
retstr = string.format("\nthe number 1024 = %e", 1024)
print(retstr)
-- 无符号数字-1==4294967295
retstr = string.format("\nthe unsigned number is %u", -1)
print(retstr)
-- 有符号数字-1
retstr = string.format("\nthe number is %d", -1)
print(retstr)
-- 常规字符串
retstr = string.format("\nthe content1 is %s",
"content1 is haha\n \0 content1 second line")
print(retstr)
-- 特殊字符串
retstr = string.format("\nthe content1 is %q",
"content2 is haha\n \0 content2 second line")
print(retstr)
- 运行结果

总结#
- 选项
c,d,e,E,f,g,G,i,o,u,x,X
只接数字作为参数,而q,s
接收字符串作为参数。 - 除了参数选项为
q
之外,函数不接受字符中包含空字符(NULL)的字符串参数。 - 各种参数选项的含义:c(字符)、d(有符号数字)、e(指数形式标书数字,小数点后6位有效数字)、E(与e相同,在数字表示中用E代替e),f(不使用指数表示数字,小数点后6位数字)、g(指数形式标书数字,保留6位有效数字)、G(与g相同,在数字表示中用E代替e)、i(测试与d相同)、o(八进制打印)、u(无符号数字)、x(十六进制表示)、X(与x相同,只是用大写字母表示)
- 注意各种参数选项对于参数的要求,有些是需要数字的,有些是需要字符串的,但这都不是非常严格的,比如需要数字的格式符,如果你传给它的字符串是可以转化成数字的就可以,比如给
%d
传参"22"
可以,但是传参数"ss"
就不行。 - 最后两组结果对比是用来显示
%q
的作用的,使用它可以显示几乎所有特殊字符,并且不需要特殊处理。
网友评论