String.format()用法

懵懂的女人 提交于 2020-04-07 02:12:08

名称 说明 

  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个参数。

 

下面是一个简单的例子:

 

int = 123;

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 - 时区名或缩写

%% - 文字上的 `%' 字符

 

 

 

 

import java.util.Date;

import java.util.Locale;

 

import org.junit.Test;

 

public class StringFormat {

 

/*

String.format()用法

 

1、转换符

%s: 字符串类型,如:"ljq"

%b: 布尔类型,如:true

%d: 整数类型(十进制),如:99

%f: 浮点类型,如:99.99

%%: 百分比类型,如:%

%n: 换行符

 */

@Test

public void test1(){

 String str=null;

    str=String.format("Hi, %s", "林计钦"); // 格式化字符串

    System.out.println(str); // 输出字符串变量str的内容

    System.out.printf("3>7的结果是:%b %n", 3>7);

    System.out.printf("100的一半是:%d %n", 100/2);

    System.out.printf("50元的书打8.5折扣是:%f 元%n", 50*0.85);

    System.out.printf("上面的折扣是%d%% %n", 85);

}

/*

2、常见日期时间格式化

c: 包括全部日期和时间信息 星期六 十月 27 14:21:20 CST 2007

F: "年-月-日"格式,如:2007-10-27

D: "月/日/年"格式,如:10/27/07

r: "HH:MM:SS PM"格式(12时制),如:02:25:51 下午

T: "HH:MM:SS"格式(24时制),如:14:28:16

R: "HH:MM"格式(24时制),如:14:28

 */

@Test

public void test2(){

    Date date=new Date(); // 创建日期对象

    System.out.printf("全部日期和时间信息:%tc%n", date);//格式化输出日期或时间

    System.out.printf("年-月-日格式:%tF%n", date);

    System.out.printf("月/日/年格式:%tD%n", date);

    System.out.printf("HH:MM:SS PM格式(12时制):%tr%n", date);

    System.out.printf("HH:MM:SS格式(24时制):%tT%n", date);

    System.out.printf("HH:MM格式(24时制):%tR%n", date);

}

/*

3、格式化日期字符串

b或者h: 月份简称,如

中:十月

英:Oct

 

B: 月份全称,如

中:十月

英:October

  

a: 星期的简称,如

中:星期六

英:Sat

  

A: 星期的全称,如:

中:星期六

英:Saturday

 

C: 年的前两位数字(不足两位前面补0),如:20

y: 年的后两位数字(不足两位前面补0),如:07

Y: 4位数字的年份(不足4位前面补0),如:2007

j: 一年中的天数(即年的第几天),如:300 

m: 两位数字的月份(不足两位前面补0),如:10

d: 两位数字的日(不足两位前面补0),如:27

e: 月份的日(前面不补0),如:5

 */

@Test

public void test3(){

    Date date=new Date();                                                                             // 创建日期对象

    String str=String.format(Locale.US,"英文月份简称:%tb",date);      // 格式化日期字符串

    System.out.println(str);                                                                              // 输出字符串内容

    System.out.printf("本地月份简称:%tb%n",date);

    str=String.format(Locale.US,"英文月份全称:%tB",date);

    System.out.println(str);

    System.out.printf("本地月份全称:%tB%n",date);

    str=String.format(Locale.US,"英文星期的简称:%ta",date);

    System.out.println(str);

    System.out.printf("本地星期的简称:%tA%n",date);

    System.out.printf("年的前两位数字(不足两位前面补0):%tC%n",date);

    System.out.printf("年的后两位数字(不足两位前面补0):%ty%n",date);

    System.out.printf("一年中的天数(即年的第几天):%tj%n",date);

    System.out.printf("两位数字的月份(不足两位前面补0):%tm%n",date);

    System.out.printf("两位数字的日(不足两位前面补0):%td%n",date);

    System.out.printf("月份的日(前面不补0):%te",date);

}

/*

4、格式化时间字符串

H: 2位数字24时制的小时(不足2位前面补0),如:15

I: 2位数字12时制的小时(不足2位前面补0),如:03

k: 2位数字24时制的小时(前面不补0),如:15

l: 2位数字12时制的小时(前面不补0),如:3

M: 2位数字的分钟(不足2位前面补0),如:03

S: 2位数字的秒(不足2位前面补0),如:09

L: 3位数字的毫秒(不足3位前面补0),如:015

N: 9位数字的毫秒数(不足9位前面补0),如:562000000

 

p: 小写字母的上午或下午标记,如:

中:下午

英:pm

  

z: 相对于GMT的RFC822时区的偏移量,如:+0800

Z: 时区缩写字符串,如:CST

s: 1970-1-1 00:00:00 到现在所经过的秒数,如:1193468128

Q: 1970-1-1 00:00:00 到现在所经过的毫秒数,如:1193468128984

 

 */

@Test

public void test4(){

    Date date=new Date();                               // 创建日期对象

    System.out.printf("2位数字24时制的小时(不足2位前面补0):%tH%n",date);

    System.out.printf("2位数字12时制的小时(不足2位前面补0):%tI%n",date);

    System.out.printf("2位数字24时制的小时(前面不补0):%tk%n",date);

    System.out.printf("2位数字12时制的小时(前面不补0):%tl%n",date);

    System.out.printf("2位数字的分钟(不足2位前面补0):%tM%n",date);

    System.out.printf("2位数字的秒(不足2位前面补0):%tS%n",date);

    System.out.printf("3位数字的毫秒(不足3位前面补0):%tL%n",date);

    System.out.printf("9位数字的毫秒数(不足9位前面补0):%tN%n",date);

    String str=String.format(Locale.US,"小写字母的上午或下午标记(英):%tp",date);

    System.out.println(str);                          // 输出字符串变量str的内容

    System.out.printf ("小写字母的上午或下午标记(中):%tp%n",date);

    System.out.printf("相对于GMT的RFC822时区的偏移量:%tz%n",date);

    System.out.printf("时区缩写字符串:%tZ%n",date);

    System.out.printf("1970-1-1 00:00:00 到现在所经过的秒数:%ts%n",date);

    System.out.printf("1970-1-1 00:00:00 到现在所经过的毫秒数:%tQ%n",date);

}

}

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!