【Java】String Format

本文将介绍以下两个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中的位置:

 

其他、参考资料

1、Java中强大的format-简书博客

2、JDK-1.8在线文档

3、Java核心技术 提取码: nmuj 

4、String.format()的用法

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值