引言

字符串的格式化相当于将字符串按照指定的格式进行toString(),一般有两种形式:

//使用指定的格式字符串和参数返回一个格式化字符串。
 public static String format(String format, Object... args) {
        return new Formatter().format(format, args).toString();
    }
//使用指定的语言环境、格式字符串和参数返回一个格式化字符串。
public static String format(Locale l, String format, Object... args) {
        return new Formatter(l).format(format, args).toString();
    }

数据转化符

数据类型

说明

转化形式

%s

字符串类型

“string”

%c

字符类型

‘A’

%b

布尔类型

true/false

%o

整数类型(八进制)

111

%d

整数类型(十进制)

17

%x

整数类型(十六进制)

11

%f

浮点类型(基本)

66.66

%e

指数类型

1.11e+5

%a

浮点类型(十六进制)

FF.22

%h

散列码

11

%%

百分比类型

17%

%n

换行符

%tx

日期与时间类型

测试
public class Format01 {
	public static void main(String[] args) {
		System.out.println(String.format("字符串:%s", "String"));
		System.out.println(String.format("字符:%c", 'M'));
		System.out.println(String.format("布尔类型:%b", 'M'>'A'));
		System.out.println(String.format("八进制整数类型:%o", 17));
		System.out.println(String.format("十进制整数类型:%d", 17));
		System.out.println(String.format("十六进制整数类型:%x", 17));
		System.out.println(String.format("基本浮点类型:%f", 99.1));
		System.out.println(String.format("指数类型:%e", 100.111111111));
		System.out.println(String.format("十六进制浮点类型:%a", 17.111111));
		System.out.println(String.format("散列码:%h", 17));
		System.out.println(String.format("百分比类型:17%%"));
		System.out.print(String.format("换行符:%n", 17));	
	}

}
输出
字符串:String
字符:M
布尔类型:true
八进制整数类型:21
十进制整数类型:17
十六进制整数类型:11
基本浮点类型:99.100000
指数类型:1.001111e+02
十六进制浮点类型:0x1.11c71c53f39d2p4
散列码:11
百分比类型:17%
换行符:

字符串的格式化

标志

说明

示例

输出

+

为正数添加符号

(“正数:%+f”,11.11))

正数:+11.110000

-

左对齐

(“左对齐:%-5d”,11)

左对齐:11

0

整数前面补0

(“数字前面补0:%04d”,11)

数字前面补0:0011

,

对数字分组

(“按,对数字分组:%,d”,111111111)

按,对数字分组:111,111,111

空格

数字前面补空格

(“空格:% 4d”,11)

空格: 11


包含负数

(“使用括号包含负数:%(f”,-11.11)

使用括号包含负数:(11.110000)

#

浮点数包含小数,八进制包含0,十六进制包含0x

<

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

(“格式化前描述的参数:%f转化后%❤️.3f”,111.1111111)

格式化前描述的参数:111.111111转化后111.111

$

被格式化的参数索引

(“被格式化的参数索引:%1s”,11,“111.1111111”)

被格式化的参数索引:11,111.1111111

测试
public class formatString {
	public static void main(String[] args) {
		System.out.println(String.format("正数:%+f",11.11));
		System.out.println(String.format("右对齐:%+10d",11));
		System.out.println(String.format("左对齐:%-5d",11));
		System.out.println(String.format("数字前面补0:%044d",11));
		System.out.println(String.format("空格:% 4d",11));
		System.out.println(String.format("按,对数字分组:%,d",111111111));
		System.out.println(String.format("使用括号包含负数:%(f",-11.11));
		System.out.println(String.format("浮点数包含小数点:%#f",11.1));
		System.out.println(String.format("八进制包含0:%#o",11));
		System.out.println(String.format("十六进制包含0x:%#x",11));
		System.out.println(String.format("格式化前描述的参数:%f转化后%<3.3f",111.1111111));
		System.out.println(String.format("被格式化的参数索引:%1$d,%2$s",11,"111.1111111"));
		
	}

}
输出
正数:+11.110000
右对齐:       +11
左对齐:11   
数字前面补0:00000000000000000000000000000000000000000011
空格:  11
按,对数字分组:111,111,111
使用括号包含负数:(11.110000)
浮点数包含小数点:11.100000
八进制包含0:013
十六进制包含0x:0xb
格式化前描述的参数:111.111111转化后111.111
被格式化的参数索引:11,111.1111111

日期的格式化

转换符

说明

示例

c

全部时间日期

星期四 十二月 17 13:11:35 CST 2020

F

年-月-日格式

2020-12-17

D

月/日/年格式

12/17/20

r

HH:MM:SS PM格式(12时制)

01:11:35 下午

T

HH:MM:SS格式(24时制)

13:11:35

R

HH:MM格式(24时制)

13:11

测试
public class formatDate {
	public static void main(String[] args) {
		Date date = new Date();
		System.out.println(String.format("全部时间日期:%tc",date));
		System.out.println(String.format("年-月-日格式:%tF",date));
		System.out.println(String.format("月/日/年格式:%tD",date));
		System.out.println(String.format("HH:MM:SS PM格式(12时制):%tr",date));
		System.out.println(String.format("HH:MM:SS格式(24时制):%tT",date));
		System.out.println(String.format("HH:MM格式(24时制):%tR",date));
	}
}
输出
全部时间日期:星期四 十二月 17 13:21:35 CST 2020
年-月-日格式:2020-12-17
月/日/年格式:12/17/20
HH:MM:SS PM格式(12时制):01:21:35 下午
HH:MM:SS格式(24时制):13:21:35
HH:MM格式(24时制):13:21

时间的格式化

转换符

说明

示例

H

2位数字24时制的小时(不足2位前面补0)

13

l

2位数字12时制的小时

1

k

2位数字24时制的小时

13

M

2位数字的分钟

33

L

3位数字的毫秒

745

S

2位数字的秒

33

N

9位数字的毫秒数

745000000

p

Locale.US,"小写字母的上午或下午标记(英)

下午

Z

时区缩写字符串

CST

z

相对于GMT的RFC822时区的偏移量

+0800

s

1970-1-1 00:00:00 到现在所经过的秒数

1608183213

Q

1970-1-1 00:00:00 到现在所经过的毫秒数

1608183213745

测试
public class formatTime {
	public static void main(String[] args) {
		Date date = new Date();
		System.out.println(String.format("2位数字24时制的小时(不足2位前面补0):%tH", date));
		System.out.println(String.format("2位数字12时制的小时:%tl", date));
		System.out.println(String.format("2位数字24时制的小时:%tk", date));
		System.out.println(String.format("2位数字的分钟:%tM", date));
		System.out.println(String.format("3位数字的毫秒:%tL", date));
		System.out.println(String.format("2位数字的秒:%tS", date));
		System.out.println(String.format("9位数字的毫秒数:%tN", date));
		System.out.println(String.format("时区缩写字符串:%tZ", date));
		System.out.println(String.format("相对于GMT的RFC822时区的偏移量:%tz", date));
		System.out.println(String.format("Locale.US,\"小写字母的上午或下午标记(英):%tp", date));
		System.out.println(String.format("1970-1-1 00:00:00 到现在所经过的秒数:%ts", date));
		System.out.println(String.format("1970-1-1 00:00:00 到现在所经过的毫秒数:%tQ", date));

	}

}
输出
2位数字24时制的小时(不足2位前面补0):13
2位数字12时制的小时:1
2位数字24时制的小时:13
2位数字的分钟:33
3位数字的毫秒:745
2位数字的秒:33
9位数字的毫秒数:745000000
时区缩写字符串:CST
相对于GMT的RFC822时区的偏移量:+0800
Locale.US,"小写字母的上午或下午标记(英):下午
1970-1-1 00:00:00 到现在所经过的秒数:1608183213
1970-1-1 00:00:00 到现在所经过的毫秒数:1608183213745