String类的format()方法用于创建格式化的字符串以及连接多个字符串对象。
有2个重载的方法:
1、static String format(Locale l, String format, Object... args)
使用指定的语言环境、字符串格式和参数生成格式化的新字符串
2、static String format(String format, Object... args)
使用指定的字符串格式和参数生成格式化的新字符串
locale:指定的语言环境参数。
format:字符串格式参数,有很多种转换符选项,例如:日期、整数、浮点数等。转换符见下表
args...:字符串格式中由格式说明符引用的参数。对整数进行格式化:%[index$][标识][最小宽度]转换方式
对浮点数进行格式化:%[index$][标识][最少宽度][.精度]转换方式
|
转 换 符 |
说 明 |
示 例 |
|
%s |
字符串类型 |
"mingrisoft" |
|
%c |
字符类型 |
'm' |
|
%b |
布尔类型 |
true |
|
%d |
整数类型(十进制) |
99 |
|
%x |
整数类型(十六进制) |
FF |
|
%o |
整数类型(八进制) |
77 |
|
%f |
浮点类型 |
99.99 |
|
%a |
十六进制浮点类型 |
FF.35AE |
|
%e |
指数类型 |
9.38e+5 |
|
%g |
通用浮点类型(f和e类型中较短的) | |
|
%h |
散列码 | |
|
%% |
百分比类型 |
% |
|
%n |
换行符 | |
|
%tx |
日期与时间类型(x代表不同的日期与时间转换符 |
实例:
public class StringFormatDemo1 {
public static void main(String arg[]) {
String s = String.format("%s%s %c %b %d %x %o %f %d%%", "Hello", "World", 'a', true, 10, 10, 10, 10.0, 10);
System.out.println(s);
/*
HelloWorld a true 10 a 12 10.000000 10%
*/
}
}
字符串格式参数还可以与各种标志组合在一起,生成各种格式的字符串,这些标志见下表:
|
标 志 |
说 明 |
示 例 |
结 果 |
|
+ |
为正数或者负数添加符号 |
("%+d",15) |
+15 |
|
− |
左对齐 |
("%-5d",15) |
|15 | |
|
0 |
数字前面补0 |
("%04d", 99) |
0099 |
|
空格 |
在整数之前添加指定数量的空格 |
("% 4d", 99) |
| 99| |
|
, |
以“,”对数字分组 |
("%,f", 9999.99) |
9,999.990000 |
|
( |
使用括号包含负数 |
("%(f", -99.99) |
(99.990000) |
|
# |
如果是浮点数则包含小数点,如果是16进制或8进制则添加0x或0 |
("%#x", 99) ("%#o", 99) |
0x63 0143 |
|
< |
格式化前一个转换符所描述的参数 |
("%f和%<3.2f", 99.45) |
99.450000和99.45 |
|
$ |
被格式化的参数索引 |
("%1$d,%2$s", 99,"abc") |
99,abc |
实例:
public class StringFormatDemo2 {
public static void main(String arg[]) {
//+:为正数或者负数添加符号
String s = String.format("%+d %+d %d", 0, -10, -10);
System.out.println(s);
/*
+0 -10 -10
*/
//0:数字前面补0,后面加数字为总位数
//<:格式化前一个转换符所描述的参数
s = String.format("%01d %<02d %<03d %<04d", 10);
System.out.println(s);
/*
10 10 010 0010
*/
//,:以“,”对数字分组
s = String.format("%,d %,f", 100000, 100000.0);
System.out.println(s);
/*
100,000 100,000.000000
*/
//$:被格式化的参数索引
s = String.format("%1$s %3$d %2$s", "abc", "def", 10);
System.out.println(s);
/*
abc 10 def
*/
//[最小宽度]:在整数转换符中不加空格、或加1个空格,以指定整数的总位数
s = String.format("|%3d| |% 3d| |% 4d|", 10, 20, 30);
System.out.println(s);
/*
| 10| | 20| | 30|
*/
//[最小宽度]:在字符串转换符中加空格,以指定字符串的总位数
s = String.format("|%3s| |%<3s| |%<3s|", "a");
System.out.println(s);
/*
| a| | a| | a|
*/
}
}
%tx转换符中的x代表另外的处理日期和时间格式的转换符,它们的组合能够将日期和时间格式化成多种格式。
日期和时间组合转换符:
|
转 换 符 |
说 明 |
示 例 |
|
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 |
|
转 换 符 |
说 明 |
示 例 |
|
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 |
|
转 换 符 |
说 明 |
示 例 |
|
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 |
实例:
import java.util.*;
public class StringFormatDemo3 {
public static void main(String arg[]) {
Date date = new Date();
//c:包括全部日期和时间信息
String s = String.format("%tc", date);
System.out.println(s);
/*
星期二 十二月 10 22:34:51 CST 2013
*/
//F:“年-月-日”格式
s = String.format("%tF", date);
System.out.println(s);
/*
2013-12-10
*/
//D:“月/日/年”格式
s = String.format("%tD", date);
System.out.println(s);
/*
12/10/13
*/
//r:“HH:MM:SS PM”格式(12时制)
s = String.format("%tr", date);
System.out.println(s);
/*
10:34:51 下午
*/
//T:“HH:MM:SS”格式(24时制)
s = String.format("%tT", date);
System.out.println(s);
/*
22:34:51
*/
//R:“HH:MM”格式(24时制)
s = String.format("%tR", date);
System.out.println(s);
/*
22:34
*/
//a:星期的简称 A:星期的全称(全称只对英文语言环境有效:全Saturday、简Sat)
s = String.format("%ta", date);
System.out.println(s);
/*
星期二
*/
//b或h:月份简称 B:月份全称(全称只对英文语言环境有效)
//t:格式化前一个转换符所描述的参数
s = String.format(Locale.US, "%th %<tB", date);
System.out.println(s);
/*
Dec December
*/
//Y:4位数字的年份(不足4位前面补0)y:年的后两位数字(不足两位前面补0)
s = String.format("%ty %tY", date, date);
System.out.println(s);
/*
13 2013
*/
//j:一年中的天数(即年的第几天)
//m:两位数字的月份(不足两位前面补0)
//d:两位数字的日(不足两位前面补0)
//e:月份的日(前面不补0)
s = String.format("%tj %<tm %<td %<te", date);
System.out.println(s);
/*
344 12 10 10
*/
//H:2位数字24时制的小时(不足2位前面补0)
//I:2位数字12时制的小时(不足2位前面补0)
//k:2位数字24时制的小时(前面不补0)
//l:2位数字12时制的小时(前面不补0)
s = String.format("%tH %<tI %<tk %<tl", date);
System.out.println(s);
/*
22 10 22 10
*/
//M:2位数字的分钟(不足2位前面补0)
//S:2位数字的秒(不足2位前面补0)
//L:3位数字的毫秒(不足3位前面补0)
//N:9位数字的毫秒数(不足9位前面补0)
//p:小写字母的上午或下午标记
//s:1970-1-1 00:00:00 到现在所经过的秒数
//Q:1970-1-1 00:00:00 到现在所经过的毫秒数
s = String.format("%tM %<tS %<tL %<tN %<ts %<tQ", date);
System.out.println(s);
/*
34 51 375 375000000 1386686091 1386686091375
*/
}
}
本文深入解析 Java String 类的 format() 方法,包括其两种重载形式、参数使用、转换符选项以及与各种标志组合生成不同格式的字符串。通过具体实例展示如何灵活运用 format() 方法实现字符串的高效格式化。
1658

被折叠的 条评论
为什么被折叠?



