String.format()的使用

发布时间 2023-09-22 11:09:25作者: 丨吴丨

java.lang.String包下自带的格式化静态方法

1.简单示例

String a = String.format("你好! %s", "小扬子");
System.out.println(a);
输出结果:
Hello 小扬子

%s为占位符标识,s对应字符串类型参数

2.对字符串进行格式化

String a = "hello";
String b = "hi";
String str = String.format("%2$10s", a,b);
System.out.println(str);
输出结果:
        hi

符号说明:

*%?*占位符;***

*2$:**第二个参数,即b***

*10:**代表最小宽度,可以用 标识*10的形式,如果没写默认左边为空格,如果为"-",则右边为空格***

*s:**转换符,表示参数类型***

转换符类型:

*s:**字符串类型。***

*c:**字符类型,实参必须为char或int、short等可转换为char类型的数据类型,否则抛IllegalFormatConversionException异常。***

*b:**布尔类型,只要实参为非false的布尔类型,均格式化为字符串true,否则为字符串false。***

*n:**平台独立的换行符(与通过 System.getProperty("line.separator") 是一样的)***

3.对整数类型进行操作

int a = 1;
int b = -2000000;
String str = String.format("%2$(,4d", a,b);
System.out.println(str);
(2,000,000)

符号说明:

% : 占位符;

2$ : 第二个参数,即b

( , : 标识 "("表示若结果为负数,则用括号括住,且不显示符号,","表示每三位数用一个逗号隔开

4:****表示最小长度,4,不写左边默认以空格填充

d : 转换符,表示整形类型

转换符类型:

d : 整数类型(十进制)。

x : 整数类型(十六进制)。

o : 整数类型(八进制)。

b: 布尔类型,只要实参为非false的布尔类型,均格式化为字符串true,否则为字符串false。

n: 平台独立的换行符(与通过 System.getProperty("line.separator") 是一样的)

可用标识类型:

- : 在最小宽度内左对齐,不可以与0标识一起使用

0 : 若内容长度不足最小宽度,则在左边用0来填充。

# : 对8进制和16进制,8进制前添加一个0,16进制前添加0x。

+ : 结果总包含一个+或-号。

空格 : 正数前加空格,负数前加-号。

*, ? 只用与十进制,每3位数字间用,分隔。

( : 若结果为负数,则用括号括住,且不显示符号。

4.对浮点型进行格式化

double a = 123.456789;
double b = 11109.87654321;
System.out.print(String.format("%2$,0100.5f", a,b));
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011,109.87654

符号说明:

% : 占位符;

2$ : 第二个参数,即b

, 0 : ","表示每三位数用一个逗号隔开,当长度不够规定的长度的时候,左边以0补齐

100 : 当长度不够100的时候,左边以0补齐

.5 : 保留五位小数(按四舍五入)

f : 转换符,表示浮点型

转换符类型:

f : 浮点类型(十进制)。

a : 浮点类型(十六进制)。

e : 指数类型。

g : 浮点类型(比f和a长度短些,显示6位有效数字)。

b: 布尔类型,只要实参为非false的布尔类型,均格式化为字符串true,否则为字符串false。

n: 平台独立的换行符(与通过 System.getProperty("line.separator") 是一样的)

可用标识类型:

*- ? *在最小宽度内左对齐,不可以与0标识一起使用***

*0 ? *若内容长度不足最小宽度,则在左边用0来填充。***

*# ? *对8进制和16进制,8进制前添加一个0,16进制前添加0x。***

*+ ? *结果总包含一个+或-号。***

*空格 : 正数前加空格,负数前加-号。*

*, ? *只用与十进制,每3位数字间用,分隔。***

*( ? *若结果为负数,则用括号括住,且不显示符号。***

5.对时间类型进行格式化

Date now = new Date();
String str = String.format("%1$tF %1$tT", now);
System.out.println(str);
2018-07-20 17:26:38

符号说明:

*% ? *占位符;***

*1$ ? *第一个参数,即now***

*F:* *转换符 表示日期格式 2018-07-20,与t结合使用***

*T ? *表示时间格式,17:26:38***

*t ? *转换符,表示时间类型***

可用转换符:

c : 星期六 十月 27 14:21:20 CST 2007

F : 2007-10-27

D : 10/27/07

r : 02:25:51 下午

T : 14:28:16

R : 14:28

b : 月份简称

B : 月份全称

a : 星期简称

A : 星期全称

C : 年前两位(不足两位补零)

y : 年后两位(不足两位补零)

j : 当年的第几天

m : 月份(不足两位补零)

d : 日期(不足两位补零)

e : 日期(不足两位不补零)

H : 24小时制的小时(不足两位补零)

k : 24小时制的小时(不足两位不补零)

I : 12小时制的小时(不足两位补零)

i : 12小时制的小时(不足两位不补零)

M : 分钟(不足两位补零)

S : 秒(不足两位补零)

L : 毫秒(不足三位补零)

N : 毫秒(不足9位补零)

p : 小写字母的上午或下午标记 : 如中文为“下午” : 英文为pm

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

Z : 时区缩写 : 如CST

s : 自1970-1-1 00:00:00起经过的秒数

Q : 自1970-1-1 00:00:00起经过的豪秒

6.%<

格式化前一个转换符描述的参数

int num = 123456789;
String str = String.format("%d 变成了 %<,d", num);
System.out.println(str);
输出结果:
123456789 变成了 123,456,789