常规类型的格式化
String类的format()方法用于创建格式化的字符串以及连接多个字符串对象。熟悉C语言的读者应该记得C语言的sprintf()方法,两者有类似之处。format()方法有两种重载形式。
l format(String format, Object... args)
该方法使用指定的字符串格式和参数生成格式化的新字符串。 新字符串始终使用本地语言环境。例如当前日期信息在中国语言环境中的表现形式为“2007-10-27”,但是在其他国家有不同的表现形式。
语法:
String.format(format,args...)
format:字符串格式。
args...:字符串格式中由格式说明符引用的参数。如果还有格式说明符以外的参数,则忽略这些额外的参数。参数的数目是可变的,可以为0。
l format(Locale locale, String format, Object... args)
该方法使用指定的语言环境、字符串格式和参数生成一个格式化的新字符串。新字符串始终使用指定的语言环境。
语法:
String.format(locale,format,args...)
locale:指定的语言环境。
format:字符串格式。
args...:字符串格式中由格式说明符引用的参数。如果还有格式说明符以外的参数,则忽略这些额外的参数。参数的数目是可变的,可以为0。
format()方法中的字符串格式参数有很多种转换符选项,例如:日期、整数、浮点数等。这些转换符的说明如表7.1所示。
转换符 | 说明 | 示例 |
%s | 字符串类型 | "mingrisoft" |
%c | 字符类型 | 'c' |
%b | 布尔类型 | true |
%d | 整数类型(十进制) | 99 |
%x | 整数类型(十六进制) | FF |
%o | 整数类型(八进制) | 77 |
%f | 浮点类型 | 100.11 |
%a | 十六进制浮点类型 | FF.35AE |
%e | 指数类型 | 9.38e5 |
%g | 通用浮点类型(f和e类型中较短的) | |
%h | 散列码 | |
%% | 百分比类型 | |
%n | 换行符 | |
%tx | 日期与时间类型(x代表不同的日期与时间转换符) |
1 public static void main(String[] args){ 2 String str = null; 3 str = String.format("Hi,%s", "飞龙"); 4 System.out.println(str); 5 String str01 = String.format("字母a的大写是:%c", 'A'); 6 System.out.println(str01); 7 String str02 = String.format("3>7的结果是:%b", 3>7); 8 System.out.println(str02); 9 String str03 = String.format("100的一半是:%d", 100/2); 10 System.out.println(str03); 11 String str04 = String.format("100的16进制是:%x",100 ); 12 System.out.println(str04); 13 String str05 = String.format("100的8进制是:%o", 100); 14 System.out.println(str05); 15 String str06 = String.format("50元的书打8.5折扣是:%f元", 50*0.85); 16 System.out.println(str06); 17 String str07 = String.format("上面的价格的16进制数是:%a", 50*0.85); 18 System.out.println(str07); 19 String str08 = String.format("上面的价格的指数表示:%e", 50*0.85); 20 System.out.println(str08); 21 String str09 = String.format("上面价格的指数和浮点数结果的长度较短的是:%g", 50*0.85); 22 System.out.println(str09); 23 String str10 = String.format("上面的折扣是:%d%%",85); 24 System.out.println(str10); 25 String str11 = String.format("字母A的散列码是:%h", 85); 26 System.out.println(str11); 27 }
显示结果:
些字符串格式参数不但可以灵活将其他数据类型转换成字符串,而且可以与各种标志组合在一起,生成各种格式的字符串,这些标志如表7.2所示。
标志 | 说明 | 示例 | 结果 |
+ | 为正数添加符号 | ("%+d",15) | 15 |
- | 左对齐 | ("%-d",15) | 15 |
0 | 数字前面补指定数量的0 | ("%04d",21) | 0021 |
空格 | 在整数之前添加指定数量的空格 | ("%4d",22) | 22 |
, | 以,对数字分组 | ("%,f",1000.123) | 1,000,123000 |
( | 使用括号包含负数 | ("%(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 |
1 /** 2 * %d+ 为整数或者负数添加符号 3 * %-5d 左对齐 4 * %04d 数字前面添加指定数量的0 如果是2为数 添加2个0 如果是3为数添加1个0 如果是%05d, 也就是说补0不够5位 5 * %4d 在整数之前添加指定数量的空格 6 * %,d 对整数进行分组 %,f 对浮点数进行分组 7 * ( 使用括号包含负数 8 * @param args 9 */ 10 public static void main(String[] args){ 11 String str01 = String.format("%+d", 15); 12 System.out.println(str01); 13 String str02 = String.format("%-5d", 15); 14 System.out.println(str02); 15 String str03 = String.format("%04d", 99); 16 System.out.println(str03); 17 String str04 = String.format("%4d", 99); 18 System.out.println(str04); 19 String str05 = String.format("%,d", 999999); 20 System.out.println(str05); 21 String str06 = String.format("%,f", 9999.99); 22 System.out.println(str06); 23 String str07 = String.format("%(f", -99.999); 24 System.out.println(str07); 25 String str08 = String.format("%#x", 99); 26 System.out.println(str08); 27 String str09 = String.format("%#o", 99); 28 System.out.println(str09); 29 String str10 = String.format("%f和%<3.2f", 99.45); 30 System.out.println(str10); 31 String str11 = String.format("%1$d,%2$s", 99,"abc"); 32 System.out.println(str11); 33 }
结果显示:
7.4.2 日期和时间字符串格式化
在程序界面中经常需要显示时间和日期,但是其显示的 格式经常不尽人意,需要编写大量的代码经过各种算法才得到理想的日期与时间格式。字符串格式中还有%tx转换符没有详细介绍,它是专门用来格式化日期和时 间的。%tx转换符中的x代表另外的处理日期和时间格式的转换符,它们的组合能够将日期和时间格式化成多种格式。
1.常见日期时间格式化
格式化日期与时间的转换符定义了各种格式化日期字符串的方式,其中最常用的日期和时间的组合格式如表7.3所示。
常见的日期和时间组合格式
转换符 | 说明 | 示例 |
c | 包括全部日期和时间信息 | 星期六 十月 27 14:21:20 CST 2007 |
F | "年-月-日"格式 | 2007-20-27 |
D | "月/日/年"格式 | 10/27/07 |
r | "hh:MM;ss PM"格式(12小时制) | 02:24:42 下午 |
T | "hh:MM:ss"格式(24小时制) | 14:23:12 |
R | "hh:MM"格式(24小时制) | 14:28 |
1 public static void main(String[] args){ 2 Date date = new Date(); 3 String str01 = String.format("全部日期和时间信息:%tc", date); 4 System.out.println(str01); 5 String str02 = String.format("年-月-日格式:%tF", date); 6 System.out.println(str02); 7 String str03 = String.format("月/日/年格式:%tD", date); 8 System.out.println(str03); 9 String str04 = String.format("hh:MM:ss pm格式(12小时制):%tr", date); 10 System.out.println(str04); 11 String str05 = String.format("hh:MM:ss格式(24小时制):%tT", date); 12 System.out.println(str05); 13 String str06 = String.format("hh:MM格式(24小时制):%tR", date); 14 System.out.println(str06); 15 }
结果显示:
2.格式化日期字符串
转换符 | 说明 | 示例 |
b或者h | 月份简称 |
中:五月 英:Oct |
B | 月份全称 |
中:五月 英:October |
a | 星期简称 |
中:星期六 英:Sat |
A | 星期全称 |
中:星期六 英:Saturday |
C | 年的前两位数字(不足两位前面补0) | 20 |
y | 年后的两位数字(不足两位前面补0) | 02 |
Y | 4为数字的年份(不足4位前面补0) | 2000 |
j | 一年中的天数(即年的第几天) | 058 |
m | 两位数字的月份(不足两位前面补0) | 10 |
d | 两位数字的日(不足两位前面补0) | 27 |
e | 月份的日(前面不补0) | 5 |
1 public static void main(String[] args) { 2 Date date = new Date(); 3 String str01 = String.format(Locale.US,"英文月份简称:%tb", date); 4 System.out.println(str01); 5 String str02 = String.format("本地月份简称:%th", date); 6 System.out.println(str02); 7 String str03 = String.format(Locale.US,"英文月份全称:%tB", date); 8 System.out.println(str03); 9 String str04 = String.format("本地月份全称:%tB", date); 10 System.out.println(str04); 11 String str05 = String.format(Locale.US, "英文星期的简称:%ta", date); 12 System.out.println(str05); 13 String str06 = String.format("本地星期的简称:%ta", date); 14 System.out.println(str06); 15 String str07 = String.format(Locale.US,"英文星期的全称:%tA", date); 16 System.out.println(str07); 17 String str08 = String.format("年的前两位数字(不足两位前面补0):%tC", date); 18 System.out.println(str08); 19 String str09 = String.format("年的后两位数字(不足两位前面补0):%ty", date); 20 System.out.println(str09); 21 String str10 = String.format("取得年份(不足4位补0):%tY", date); 22 System.out.println(str10); 23 String str11 = String.format("一年中的天数(即年的第几天):%tj", date); 24 System.out.println(str11); 25 String str12 = String.format("两位数的月份(不足两位前面补0):%tm", date); 26 System.out.println(str12); 27 String str13 = String.format("两位数字的日(不足两位数前面补0):%td", date); 28 System.out.println(str13); 29 String str14 = String.format("月份的日(前面不补0):%te", date); 30 System.out.println(str14); 31 }
显示结果:
3.格式化时间字符串
和日期格式转换符相比,时间格式的转换符要更多、更精确。它可以将时间格式化成时、分、秒甚至时毫秒等单位。格式化时间字符串的转换符如表7.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 到现在所经过的秒数 | 1361958841 |
Q | 1970-1-1 00:00:00 到现在所经过的毫秒数 | 1361958841887 |
1 public static void main(String[] args) { 2 Date date = new Date(); 3 String str01 = String.format("2位数字24小时制的小时(不足2位前面补0):%tH", date); 4 System.out.println(str01); 5 String str02 = String.format("2位数字12小时制的小时(不足2位数前面补0):%tI", date); 6 System.out.println(str02); 7 String str03 = String.format("2位数字24小时制的小时(前面不补0):%tk", date); 8 System.out.println(str03); 9 String str04 = String.format("2位数字12小时制的小时(前面不补0):%tl", date); 10 System.out.println(str04); 11 String str05 = String.format("2位数字的分钟(不足2位前面补0):%tM", date); 12 System.out.println(str05); 13 String str06 = String.format("2位数字的秒(不足2位前面补0):%tS", date); 14 System.out.println(str06); 15 String str07 = String.format("3位数字的毫秒(不足3位前面补0):%tL", date); 16 System.out.println(str07); 17 String str08 = String.format("9位数字的毫秒数(不足9位前面补0):%tN", date); 18 System.out.println(str08); 19 String str09 = String.format(Locale.US,"小写字母的上午或下午标记(英):%tp", date); 20 System.out.println(str09); 21 String str10 = String.format("小写字母的上午或下午标记(中):%tp", date); 22 System.out.println(str10); 23 String str11 = String.format("相对于GMT的RFC822时区的偏移量:%tz", date); 24 System.out.println(str11); 25 String str12 = String.format("时区缩写字符串:%tZ", date); 26 System.out.println(str12); 27 String str13 = String.format("1970-1-1 00:00:00 到现在所经过的秒数:%ts", date); 28 System.out.println(str13); 29 String str14 = String.format("1970-1-1 00:00:00 到现在所经过的毫秒数:%tQ", date); 30 System.out.println(str14); 31 }
显示结果:
参考与:http://blog.csdn.net/longma2006/article/details/3018801