L3-05. string.format

1. string.format(字符串格式 ,...): 第一个参数为字符串格式,后面的参数可以任意多个,用于填充第一个参数中的格式控制符,最后返回完整的格式化后的字符串。

2. 转义码中添加参数的顺序为:%[标志][最小宽度][.精度][类型长度]类型。

3. 使用 string.format() 输出 % 需要用 %%

复制代码
--[[string.format()函数的格式顺序:
    %[标志][输出最小宽度][.精度][长度]类型
    %a      浮点数、十六进制数字和p-计数法(C99)
    %A      浮点数、十六进制数字和p-计数法(C99)
    %c    输出单个字符
    %d    以十进制形式输出带符号整数(正数不输出符号)
    %e    以指数形式输出单、双精度实数
    %E    以指数形式输出单、双精度实数
    %f    以小数形式输出单、双精度实数
    %g    以%f%e中较短的输出宽度输出单、双精度实数,%e格式在指数小于-4或者大   于等于精度时使用
    %G    以%f%e中较短的输出宽度输出单、双精度实数,%e格式在指数小于-4或者大于等于精度时使用
    %i      有符号十进制整数(与%d相同)
    %o    以八进制形式输出无符号整数(不输出前缀O)
    %p      指针
    %s    输出字符串
    %x    以十六进制形式输出无符号整数(不输出前缀OX)
    %X   以十六进制形式输出无符号整数(不输出前缀OX)
    %u    以十进制形式输出无符号整数
    
    标志字符为-、+、#、空格和0五种
    -: 左对齐,省略默认为右对齐,例如 "%8d",3 效果: |       3|(对部分类型有效)
    +: 输出符号(正号或负号)正数前加"+",负数保持原样(对数值类型有效)
    #: 对c,s,d,u类无影响;对o类,在输出时加前缀0;对x类,
       在输出时加前缀0x或者0X;对g,G 类防止尾随0被删除;
       对于所有的浮点形式,#保证了即使不跟任何数字,也打印一个小数点字符
    空格: 输出值为正数前加" "空格,为负时保持原样(对数值类型有效)
    0: 
--]]


--常用的字符串格式类型符:

--接收一个Ascll码并转为字符%c
print(string.format("%c",65))               --输出结果: A
print(string.format("%c,%c,%c",65,66,67))   --输出结果: A   B   C
print(string.format("%c%c%c",228,185,166))  --输出结果: 书
print(string.format("%-8c",65))             --输出结果: |A       |
print(string.format("%8c",65))     --输出结果: |       A|
print(string.format("%-8c",65))    --输出结果: |A       |


--接收一个十进制带符合整数%d
print(string.format("%d",20))      --输出结果: 20
print(string.format("%.3d",20))    --输出结果: 020
--.3在这里起到的是补0的作用
print(string.format("%4.3d",20))   --输出结果: | 020|
print(string.format("%+5.3d",20))  --输出结果: | +020|
print(string.format("%+5.3d",-20)) --输出结果: | -020|

--接收一个浮点数%f
--默认整体是8位,不足在小数点后补0
print(string.format("%f",5))     --输出结果: 5.000000
--不保留小数则会返回一个整数
print(string.format("%.0f",5))   --输出结果: 5
--结合上一行的内容,加入#号是为了在不保留小数的情况下保留一个小数点
print(string.format("%#.0f",5))  --输出结果: 5.

--接收一个字符串%s
print(string.format("%s","你\n我\n他"))  --[[输出结果: 你
                                                     我
                                                     他]]
--中文占3个字节
print(string.format("%.3s","你我他"))    --输出结果: 你


--接收一个字符串使其带上双引号%q
print(string.format("%q","你\n我\n他"))  --[[输出结果: "你\
                                                        我\
                                                        他"]]

--接收一个%f和%e输出宽度较短的数值
--#号是如果带有0则不删除尾号的0,如果不带则保留小数点
print(string.format("%#05.2g",68))    --输出结果: 068.
print(string.format("%#05.3g",68))    --输出结果: 068.0
复制代码

4. 实战应用

 

复制代码
x = 10
string.format("x = %d, y = %d", x, 20)
 
-- 将x使用十六进制打印
print( string.format("x = %#X", x) )
 
-- 在前面加上修饰符
string.format("x = %#x", x)
 
-- 将x以浮点数的格式打印
print( string.format("x = %+5.1f",-500.0001) )

-- 打印字符串
tag, title = "hi", "a tile"
print( string.format("<%s>%s</%s>", tag, title, tag) )


function 清除缓存(要清除的包名)
   exec(string.format("pm clear %s",要清除的包名)) --清除缓存
end

function 默认浏览器打开网页(url)
   exec(string.format("am start -a android.intent.action.VIEW -d %s", url))
end
复制代码

 

posted @   小书臣  阅读(56)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
点击右上角即可分享
微信分享提示