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