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
*/
}
}