Lua string.format()

Lua string.format()_第1张图片
格式化.jpg

前言#

今天来看一个既熟悉又陌生的函数,这个函数是用来格式化参数的,其格式化的规则和c语言中的printf()函数很像,但是为什么说既熟悉又陌生呢,原因就是虽然printf几乎每天都用到,但是他的格式符你却不一定搞的清楚,比如你来说说%g%e的区别,说不出来了吧,接下里我们一起来看一下吧。

内容#


string.format()##

  • 原型:string.format (formatstring, ···)
  • 解释:返回第一个参数描述之后的参数的格式化版本,第一个参数必须为字符串,是对结果字符串的一种描述,这个格式化的字符串和C语言的printf()一族的函数遵循相同的规则,仅有的不同体现在参数选项的修改,其中参数描述符*,l,L,ph不再支持,但是多了一个额外的选项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)
  • 运行结果
Lua string.format()_第2张图片
string_format.png

总结#

  • 选项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的作用的,使用它可以显示几乎所有特殊字符,并且不需要特殊处理。

你可能感兴趣的:(Lua string.format())