1、作为参数
名称 | 说明 | |
---|---|---|
Format(String, Object) | 将指定的 String 中的格式项替换为指定的 Object 实例的值的文本等效项。 | |
Format(String, array<>[]()[]) | 将指定 String 中的格式项替换为指定数组中相应 Object 实例的值的文本等效项。 | |
Format(IFormatProvider, String, array<>[]()[]) | 将指定 String 中的格式项替换为指定数组中相应 Object 实例的值的文本等效项。指定的参数提供区域性特定的格式设置信息。 | |
Format(String, Object, Object) | 将指定的 String 中的格式项替换为两个指定的 Object 实例的值的文本等效项。 | |
Format(String, Object, Object, Object) | 将指定的 String 中的格式项替换为三个指定的 Object 实例的值的文本等效项。 |
多个参数
int m[]=new int{a,b,c,d};
string.format("{0}{1}{2}",m);
一个参数
private const string _extraClause = " AND C_INTERNSHIPORG_INTERNSHIPID = {0}";
//将MyCrypt.Decrypt(Request["id"])作为_extraClause 的参数
if (Request["id"] != null && Request["id"] != string.Empty)
{
mExtraMessage = string.Format(_extraClause, MyCrypt.Decrypt(Request["id"]));
}
2、格式化数值结果表
字符 | 说明 | 示例 | 输出 |
C | 货币 | string.Format("{0:C3}", 2) | $2.000 |
D | 十进制 | string.Format("{0:D3}", 2) | 002 |
E | 科学计数法 | 1.20E+001 | 1.20E+001 |
G | 常规 | string.Format("{0:G}", 2) | 2 |
N | 用分号隔开的数字 | string.Format("{0:N}", 250000) | 250,000.00 |
X | 十六进制 | string.Format("{0:X000}", 12) | C |
string.Format("{0:000.000}", 12.2) | 012.200 |
string.format用来格式化字符串(按指定的规则连接字符串或输出其他变量并返回新的字符串) 。
string.format(fm,...);
第一个参数用fm表示输出的格式,每个%符号后面是一个格式化表达式,每个格式化表达式按顺序对应后面的参数。
所以用了N个格式化表达式,就必须在后面添加N个参数。
下面是一个简单的例子:
str = "字符串"
--下面的%s对应参数str, %i对应参数int
str = string. format ( "这是字符串:'%s' 这是数字值 %i", str, int );
win.messageBox (str );
--%05i表示格式化为至少五位的数字,不足在前面补0
str = string. format ( "%05i", int );
win.messageBox (str );
格式化表达式:%[零个或多个标志][最小字段宽度][精度][修改符]格式码
注意:[]方括号表示可选参数
1、格式码
代码 c
参数 数字值(number)
含义 参数被裁剪为8位字节码并作为字符进行打印。
代码 i,d
参数 数字值(number)
含义 参数作为一个十进制整数打印。如果给出了精度而且值的位数小于精度位数,前面就用0填充。
代码 u,o,x,X
参数 数字值(number)
含义 参数作为一个无符号数字值打印,u使用十进制,o使用八进制,x或X使用十六进制,两者的区别是x约定使用abcdef,而X约定使用ABCDEF。
代码 e,E
参数 数字值(number)
含义 参数根据指数形式打印。例如,6.023000e23是使用代码e,6.023000E23是使用代码E。小数点后面的位数由精度字段决定,缺省值是6。
代码 f
参数 数字值(number)
含义 参数按照的常规浮点格式打印。精度字段决定小数点后面的位数,缺省值是6。
代码 g,G
参数 数字值(number)
含义 参数以%f或%e(如G则%E)的格式打印,取决于它的值。如果指数大于等于-4但小于精度字段就使用%f格式,否则使用指数格式。
代码 s
参数 字符串值(string)
含义 打印一个字符串。
代码 q
参数 (无)
含义 打印一个字符串,并将字符串置于一对引号中,如果字符串中包含引号换行等自动添加转义符。如果要读取一个字符串传为脚本代码。为避免用户恶意注入引号等特殊字符,可以使用%q进行格式化。
代码 %
参数 (无)
含义 取消%转义打印一个%字符,即用%%表示本来的%。
2、 标志
标志 -
含义 值在字段中做对齐,缺省情况下是右对齐。
标志 0
含义 当数值为右对齐时,缺省情况下是使用空格填充值左边未使用的列。这个标志表示用零填充,它可用于d,i,u,o,x,X,e,E,f,g和G代码。
使用d,i,u,o,x和X代码时,如果给出了精度字段,零标志就被忽略。如果格式代码中出现了负号,零标志也没有效果。
标志 +
含义 当用于一个格式化某个有符号值代码时,如果值非负,正号标志就会给它加上一个正号。如果该值为负,就像往常一样显示一个负号。在
缺省情况下,正号并不会显示。
标志 空格
含义 只用于转换有符号值的代码。当值非负时,这个标志把一个空格添加到它开始的位置。注意这个标志和正号标志是相互排斥的,如果两个
同时给出,空格标志便被忽略。
标志 #
含义 选择某些代码的另一种转换形式:
用于... #标志...
o 保证产生的值以一个零开头
x,X 在非零值前面加0x前缀(%X则为0X)
e,E,f 确保结果始终包含一个小数点,即使它后面没有数字
g,G 和上面的e,E和f代码相同。另外,缀尾的0并不从小数中去除
3、 字段宽度
字段宽度是一个十进制整数,用于指定将出现在结果中的最小字符数。如果值的字符数少于字段宽度,就对它进行填充以增加长度。
4、 精度
精度以一个句点开头,后面跟一个可选的十进制数。如果未给出整数,精度的缺省值为零。
对于d,i,u,o,x和X类型的转换,精度字段指定将出现在结果中的最小的数字个数并覆盖零标志。如果转换后的值的位数小于宽度,就在它的前面插入零。如果值为零且精度也为零,则转换结果就不会产生数字。
对于e,E和f类型的转换,精度决定将出现在小数点之后的数字位数。
对于g和G类型的转换,它指定将出现在结果中的最大有效位数。
当使用s类型的转换时,精度指定将被转换的最多的字符数。
如果用于表示字段宽度和/或精度的十进制整数由一个星号代替,那么printf的下一个参数(必须是个整数)就提供宽度和(或)精度。因此,
这些值可以通过计算获得而不必预先指定。
5、示例
格式代码 A ABC ABCDEFGH
%s A ABC ABCDEFGH
%5s ####A ##ABC ABCDEFGH
%.5s A ABC ABCDE
%5.5s ####A ##ABC ABCDE
%-5s A#### ABC## ABCDEFGH
格式代码 1 -12 12345 123456789
%d 1 -12 12345 123456789
%6d #####1 ###-12 #12345 123456789
%.4d 0001 -0012 12345 123456789
%6.4d ##0001 #-0012 #12345 123456789
%-4d 1#### -12# 12345 123456789
%04d 0001 -012 12345 123456789
%+d +1 -12 +12345 +123456789
格式代码 1 .01 .00012345 12345.6789
%f 1.000000 0.010000 0.000123 12345.678900
%10.2d ######1.00 #####0.01 ######0.00 ##12345.67
%e 1.000000e+00 1.000000e-02 1.234500e-04 1.234568e+04
%.4e 1.0000e+00 1.0000e-02 1.2345e-04 1.2346e+04
%g 1 0.01 0.00012345 12345.7
格式代码 6.023e23
%f 60229999999999975882752.000000
%10.2e 60229999999999975882752.00
%e 6.023000e+23
%.4e 6.0230e+23
%g 6.023e+23
用上面的格式化函数可以轻松实现数字的进制转换
--数字转换为二进制字符串
str = string.format("%b",23 );
--二进制字符串转换为数字
n = tonumber(str,2)
--数字转换为八进制字符串
str = string.format("%o",23 );
--八进制字符串转换为数字
n = tonumber(str,8)
--数字转换为十六进制字符串
str = string.format("%x",23 );
--十六进制字符串转换为数字
n = tonumber(str,16)
四、格式化时间
模拟精灵v7.10 格式化时间的函数有 string.time;string.ftime;os.data;os.time 等函数。
os.time 是从table生成数字时间值 string.time是从字符串生成数字时间值。
os.data 与string.ftime功能相同从时间值反过来生成字符串或时间。
这里我们介绍string.time函数、string.ftime函数,下面是使用示例:
--从字符串创建时间值
t = string.time("2006/6/6 0:0:0","%Y/%m/%d %H:%M:%S")
--从时间值创建字符串
str = string.ftime("%Y/%m/%d %H:%M:%S",t )
格式化语法(在很多编程语言中都适用的语法)
%a - 当前区域星期几的简写
%A - 当前区域星期几的全称
%b - 当前区域月份的简写
%B - 当前区域月份的全称
%c - 当前区域首选的日期时间表达
%C - 世纪值(年份除以 100 后取整,范围从 00 到 99)
%d - 月份中的第几天,十进制数字(范围从 01 到 31)
%D - 和 %m/%d/%y 一样
%e - 月份中的第几天,十进制数字,一位的数字前会加上一个空格(范围从 ' 1' 到 '31')
%g - 和 %G 一样,但是没有世纪
%G - 4 位数的年份,符合 ISO 星期数(参见 %V)。和 %V 的格式和值一样,只除了如果 ISO 星期数属于前一年或者后一年,则使用那一年。
%h - 和 %b 一样
%H - 24 小时制的十进制小时数(范围从 00 到 23)
%I - 12 小时制的十进制小时数(范围从 00 到 12)
%j - 年份中的第几天,十进制数(范围从 001 到 366)
%m - 十进制月份(范围从 01 到 12)
%M - 十进制分钟数
%n - 换行符
%p - 根据给定的时间值为 `am' 或 `pm',或者当前区域设置中的相应字符串
%r - 用 a.m. 和 p.m. 符号的时间
%R - 24 小时符号的时间
%S - 十进制秒数
%t - 制表符
%T - 当前时间,和 %H:%M:%S 一样
%u - 星期几的十进制数表达 [1,7],1 表示星期一
%U - 本年的第几周,从第一周的第一个星期天作为第一天开始
%V - 本年第几周的 ISO 8601:1988 格式,范围从 01 到 53,第 1 周是本年第一个至少还有 4 天的星期,星期一作为每周的第一天。(用 %G 或者 %g 作为指定时间戳相应周数的年份组成。)
%W - 本年的第几周数,从第一周的第一个星期一作为第一天开始
%w - 星期中的第几天,星期天为 0
%x - 当前区域首选的时间表示法,不包括时间
%X - 当前区域首选的时间表示法,不包括日期
%y - 没有世纪数的十进制年份(范围从 00 到 99)
%Y - 包括世纪数的十进制年份
%Z - 时区名或缩写
%% - 文字上的 `%' 字符
1.对整数进行格式化:%[index$][标识][最小宽度]转换方式
我们可以看到,格式化字符串由4部分组成,其中%[index$]的含义我们上面已经讲过,[最小宽度]的含义也很好理解,就是最终该整数转化的字符串最少包含多少位数字。我们来看看剩下2个部分的含义吧:











上面的说明过于枯燥,我们来看几个具体的例子。需要特别注意的一点是:大部分标识字符可以同时使用。












2.对浮点数进行格式化:%[index$][标识][最少宽度][.精度]转换方式
我们可以看到,浮点数的转换多了一个“精度”选项,可以控制小数点后面的位数。













3.对字符进行格式化:
对字符进行格式化是非常简单的,c表示字符,标识中'-'表示左对齐,其他就没什么了。
4.对百分比符号进行格式化:
看了上面的说明,大家会发现百分比符号“%”是特殊格式的一个前缀。那么我们要输入一个百分比符号该怎么办呢?肯定是需要转义字符的,但是要注意的是,在这里转义字符不是“\”,而是“%”。换句话说,下面这条语句可以输出一个“12%”:
System.out.println(String.format("%1$d%%", 12));
5.取得平台独立的行分隔符:
System.getProperty("line.separator")可以取得平台独立的行分隔符,但是用在format中间未免显得过于烦琐了。于是format函数自带了一个平台独立的行分隔符那就是String.format("%n")。
6.对日期类型进行格式化:
以下日期和时间转换的后缀字符是为 't' 和 'T' 转换定义的。这些类型相似于但不完全等同于那些由 GNU date 和 POSIX strftime(3c) 定义的类型。提供其他转换类型是为了访问特定于 Java 的功能(如将 'L' 用作秒中的毫秒)。
以下转换字符用来格式化时间:
'H' 24 小时制的小时,被格式化为必要时带前导零的两位数,即 00 - 23。
'I' 12 小时制的小时,被格式化为必要时带前导零的两位数,即 01 - 12。
'k' 24 小时制的小时,即 0 - 23。
'l' 12 小时制的小时,即 1 - 12。
'M' 小时中的分钟,被格式化为必要时带前导零的两位数,即 00 - 59。
'S' 分钟中的秒,被格式化为必要时带前导零的两位数,即 00 - 60 ("60" 是支持闰秒所需的一个特殊值)。
'L' 秒中的毫秒,被格式化为必要时带前导零的三位数,即 000 - 999。
'N' 秒中的毫微秒,被格式化为必要时带前导零的九位数,即 000000000 - 999999999。
'p' 特定于语言环境的 上午或下午 标记以小写形式表示,例如 "am" 或 "pm"。使用转换前缀 'T' 可以强行将此输出转换为大写形式。
'z' 相对于 GMT 的 RFC 822 格式的数字时区偏移量,例如 -0800。
'Z' 表示时区缩写形式的字符串。Formatter 的语言环境将取代参数的语言环境(如果有)。
's' 自协调世界时 (UTC) 1970 年 1 月 1 日 00:00:00 至现在所经过的秒数,即 Long.MIN_VALUE/1000 与 Long.MAX_VALUE/1000 之间的差值。
'Q' 自协调世界时 (UTC) 1970 年 1 月 1 日 00:00:00 至现在所经过的毫秒数,即 Long.MIN_VALUE 与 Long.MAX_VALUE 之间的差值。
以下转换字符用来格式化日期:
'B' 特定于语言环境的月份全称,例如 "January" 和 "February"。
'b' 特定于语言环境的月份简称,例如 "Jan" 和 "Feb"。
'h' 与 'b' 相同。
'A' 特定于语言环境的星期几全称,例如 "Sunday" 和 "Monday"
'a' 特定于语言环境的星期几简称,例如 "Sun" 和 "Mon"
'C' 除以 100 的四位数表示的年份,被格式化为必要时带前导零的两位数,即 00 - 99
'Y' 年份,被格式化为必要时带前导零的四位数(至少),例如,0092 等于格里高利历的 92 CE。
'y' 年份的最后两位数,被格式化为必要时带前导零的两位数,即 00 - 99。
'j' 一年中的天数,被格式化为必要时带前导零的三位数,例如,对于格里高利历是 001 - 366。
'm' 月份,被格式化为必要时带前导零的两位数,即 01 - 13。
'd' 一个月中的天数,被格式化为必要时带前导零两位数,即 01 - 31
'e' 一个月中的天数,被格式化为两位数,即 1 - 31。
以下转换字符用于格式化常见的日期/时间组合。
'R' 24 小时制的时间,被格式化为 "%tH:%tM"
'T' 24 小时制的时间,被格式化为 "%tH:%tM:%tS"。
'r' 12 小时制的时间,被格式化为 "%tI:%tM:%tS %Tp"。上午或下午标记 ('%Tp') 的位置可能与语言环境有关。
'D' 日期,被格式化为 "%tm/%td/%ty"。
'F' ISO 8601 格式的完整日期,被格式化为 "%tY-%tm-%td"。
'c' 日期和时间,被格式化为 "%ta %tb %td %tT %tZ %tY",例如 "Sun Jul 20 16:17:00 EDT 1969"。