本文将介绍以下两个format
一个是String类中的format静态方法(重点介绍)
另一个是java.text.Format抽象基类
一、String类中的format方法
String.format() 是JDK1.5中,String类新增的一个静态方法,用来格式化的字符串。
静态方法:
#使用指定的区域设置,格式字符串和参数返回格式化的字符串。
format(Locale l, String format, Object... args)
#使用指定的格式字符串和参数返回格式化的字符串。
format(String format, Object... args)
format 结构:
#对整数进行格式化
%[index$][标识][最小宽度]转换符
#对浮点数进行格式化
%[index$][标识][最少宽度][.精度]转换符
#常规类型、字符类型格式化
%[index$][标识][最小宽度]转换符
#对日期和时间类型格式化
%[index$][标识][最小宽度]转换符
#与参数不对应的占位符格式
%[标识][最小宽度]转换符
1、关于format结构的解释
(1)、index$
可选的index是一个十进制整数,表明参数在参数列表中的位置,第一个参数由 "1$" 引用,第二个参数由 "2$" 引用,依此类推。
(2)、最小宽度
表明最终转换后的字符串,最少包含多少位。
(3)、精度
可以控制小数点后面的位数。
转换符 | 类型 | 举例 | 结果 |
. | 控制小数点后面的位数 | "%3.2f",23.3333 | 23.33 |
(4)、标识
标识 | 目的 | 举例 | 结果 |
'-' | 在最小宽度内左对齐,不可以与“用0填充”同时使用 | "%-6d",233 | |233 | |
'+' | 结果总是包括一个符号(正号或者负号) | "%+d",233 或者 "%+d",-233 | +233 或者 -233 |
' ' | 正值前加空格,负值前加负号 | "% d",233 或者 "% d",-233 | | 233| 或者 |-233| |
'0' | 数字前面用零来填充 | "%06d",233 | 000233 |
'(' | 将负号括在括号里 | "%(d",233 或者 "%(d",-233 | 233 或者 (233) |
',' | 添加分组分隔符 | "%,d",2333333 | 2,333,333 |
'#'(对于f格式) | 包含小数点 | "%#f",233f | 233.000000 |
'#'(对于x或者0格式) | 如果是16进制或8进制则添加0x或0 | "%#x",233 或者 "%#o",233 | 0xe9或者0351 |
'<' | 格式化前一个转换符所描述的参数 | ("%f和%<3.2f", 233.33) | 233.330000和233.33 |
(5)、转换符(字符串)
转换符 | 类型 | 举例 | 结果 |
s | 字符串类型 | "%s","abc" | abc |
c | 字符类型 | "%c",'a' | a |
b | 布尔类型 | '%b',true | true |
d | 整数类型(十进制) | '%d',233 | 233 |
x | 整数类型(十六进制) | "%x",233 | e9 |
o | 整数类型(八进制) | "%o",233 | 351 |
f | 浮点类型 | "%f",233f | 233.000000 |
a | 十六进制浮点类型 | "%a",233f | 0x1.d2p7 |
e | 指数类型 | "%e",233f | 2.330000e+02 |
g | 通用浮点类型(f和e类型中较短的) | "%g",233f | 233.000 |
h | 散列码 | "%h",233f | 43690000 |
% | 百分比类型 |
| % |
n | 换行符 | "%s%n","abc" | abc
|
tx | 日期与时间类型(x代表不同的日期与时间转换符,下方将详解) |
|
|
(6)、转换符(tx日期)
转换符 | 类型 | 举例 | 结果 |
c | 包括全部日期和时间信息 | "%tc",new Date() | 星期一 七月 22 14:41:06 CST 2019 |
F | “年-月-日”格式 | "%tF",new Date() | 2019-07-22 |
D | “月/日/年”格式 | "%tD",new Date() | 07/22/19 |
r | “HH:MM:SS PM”格式(12时制) | "%tr",new Date() | 02:41:54 下午 |
T | “HH:MM:SS”格式(24时制) | "%tT",new Date() | 14:41:54 |
R | “HH:MM”格式(24时制) | "%tR",new Date() | 14:41 |
B | 月的完整拼写 | Locale.US,"%tB",new Date() | July |
b或h | 月的缩写 | Locale.US,"%tb",new Date() | Jul |
m | 两位数字的月(前面补0) | "%tm",new Date() | 07 |
d | 两位数字的日(前面补0) | "%td",new Date() | 22 |
e | 两位数字的日(前面不补0) | "%te",new Date() | 22 |
A | 星期几的完整拼写 | Locale.US,"%tA",new Date() | Monday |
a | 星期几的缩写 | Locale.US,"%ta",new Date() | Mon |
j | 三位数的年中的日子(前面补0) | "%tj",new Date() | 203 |
(7)、转换符(tx时间)
转换符 | 类型 | 举例 | 结果 |
H | 2位数字24时制的小时(不足2位前面补0) | "%tH",new Date() | 15 |
I(大写的i) | 2位数字12时制的小时(不足2位前面补0) | "%tI",new Date() | 03 |
k | 2位数字24时制的小时(前面不补0) | "%tk",new Date() | 15 |
l(小写的l) | 2位数字12时制的小时(前面不补0) | "%tl",new Date() | 3 |
M | 2位数字的分钟(不足2位前面补0) | "%tM",new Date() | 09 |
S | 2位数字的秒(不足2位前面补0) | "%tS",new Date() | 43 |
L | 3位数字的毫秒(不足3位前面补0) | "%tL",new Date() | 110 |
N | 9位数字的毫秒数(不足9位前面补0) | "%tN",new Date() | 111000000 |
p | 小写字母的上午或下午标记 | "%tp",new Date() | 下午 |
z | 相对于GMT的RFC822时区的偏移量 | "%tz",new Date() | +0800 |
Z | 时区缩写字符串 | "%tZ",new Date() | CST |
s | 1970-1-1 00:00:00 到现在所经过的秒数 | "%ts",new Date() | 1563779383 |
Q | 1970-1-1 00:00:00 到现在所经过的毫秒数 | "%tQ",new Date() | 1563779383111 |
2、String.format() 复杂场景
#此商品折扣为90%
System.out.println(String.format("此商品折扣为%d%% %n",90));
#格式参数$的使用:(233.333000),-233.33
System.out.println(String.format("格式参数$的使用:%1$(f,%1$+3.2f", -233.333));
#最牛的编号是:007
System.out.println(String.format("最牛的编号是:%03d%n", 7));
二、java.text.Format 介绍
Format 是用于格式化信息(如日期,消息和数字)的抽象基类。
他有三个直接子类,分别为:DateFormat , MessageFormat , NumberFormat
DateFormat - 抽象类
MessageFormat - 实现类
NumberFormat - 抽象类
由于format是抽象基类,所以对于具体子类必须实现以下三个具体方法:
#用于将对象格式化为指定模式的字符串
format(Object obj, StringBuffer toAppendTo, FieldPosition pos)
formatToCharacterIterator(Object obj)
#用于将字符串重新解析为对象
parseObject(String source, ParsePosition pos)
Format在JDK中的位置:
其他、参考资料
3、Java核心技术 提取码: nmuj