format方法
格式化字符串是程序中经常用到的,主要包括日期格式化、时间格式化、日期/时间组合的格式化和常规类型的格式化。
在JDK1.5中,String类增加了一个新的静态方法format,用于将各种数据类型格式化成字符串。
format方法有两种重载形式:
-
format(包含格式说明符的格式字符串format, 包含待被格式化的对象列表的不定长参数args)
- args:待格式化的对象列表可以包含额外的对象
- 作用:使用默认的语言环境,格式字符串以及对象列表生成一个格式化字符串
-
format(语言环境Locale, format, args)
- 作用:使用指定的语言环境,格式字符串以及对象列表生成一个格式化字符串
与参数对应的格式说明符
格式字符串中,可以包含格式说明符,格式说明符用来指定将哪个对象格式化,以及格式化成什么形式,格式说明符以%index$开头,index从1开始取值,表示将第index个对象进行格式化;也可以包含非格式说明符,这些字符写的是什么,就输出什么。
-
对整型进行格式化:
- 格式说明符:%[index$][标识][最小宽度]转换方式
-
标识包括:
- “-”:在最小宽度内左对齐,不可以与“用0填充”同时使用
- “#”:只适用于八进制和十六进制,八进制时在结果前增加0,十六进制时在结果前增加0x
- 空格:正值前加空格,负值前加负号(一般情况下只适用于10进制,若对象为BigInteger才可以用于8进制和16进制)
- “+”:结果总是包含符号
- “0”:结果用零来填充
- “,”:只适用于十进制,每三位数字之间用“,”分隔
- “(”:若参数是负数,则结果中不添加负号,而是用圆括号括起来
-
转换方式:
- d - 十进制
- o - 八进制
- x或X - 十六进制
-
对浮点数进行格式化:
- 格式说明符:%[index$][标识][最小宽度][.精度]转换方式
-
标识符包括:
- “-”:在最小宽度内左对齐,不可以与“用0填充”同时使用
- “+”:结果总是包含符号
- 空格:正值前加空格,负值前加负号
- “0”:结果将用零来填充
- “,”:每三位数字之间用“,”分隔(只适用于fgG格式)
- “#”:若参数是负数,则结果中不添加负号,而是用括号括起来(只适用于eEfgG格式)
-
转换方式:
- e,E - 科学计数法表示的十进制
- f - 普通方式表示的十进制
- g,G - 根据具体情况,自动选择普通方式,还是科学计数法方式
- a,A - 带有效位数和指数的十六进制浮点数
-
对字符进行格式化:
-
对百分比符号进行格式化:
-
取得平台独立的行分隔符:
-
对布尔类型进行格式化
-
对字符串进行格式化:
-
对日期类型进行格式化:
- %tB或%TB - 特定于语言环境的月份全称,比如“九月”,“September”
- %tb或%Tb - 特定于语言环境的月份简称,比如“九月”,“SEP”
- %th或%Th - 与tb相同
- %tA或%TA - 特定于语言环境的星期几的全称,比如“星期五”,“FRIDAY”
- %ta或%Ta - 特定于语言环境的星期几的简称,比如“星期五”,“FRI”
- %tc或%Tc - 包含全部日期和时间信息,相当于“%ta %tb %td %tT %tZ %tY”,比如“FRI SEP 16 16:06:55 CST 2016”
- %tY或%TY - 四位年份,比如“2016”
- %tj或%Tj - 一年中的第几天(001-366),比如“260”
- %tm或%Tm - 月份(01-12),比如“09”
- %td或%Td - 一个月中的第几天(01-31),比如“16”
- %te或%Te - 一个月中的第几天(1-31),比如“16”
- %ty或%Ty - 两位年份,比如16
-
对时间进行格式化:
- %tH或%TH - 2位数字的24时制的小时(00-23),比如“16”
- %tI或%TI - 2位数字的12时制的小时(01-12),比如“04”
- %tk或%Tk - 2位数字的24时制的小时(0-23),比如“5”
- %tl或%Tl - 2位数字的12时制的小时(1-12),比如“4”
- %tM或%TM - 2位数字的分钟(00-59),比如“22”
- %tS或%TS - 2位数字的秒数(00-60),比如“39”
- %tL或%TL - 3位数字的毫秒数(000-999),比如“909”
- %tN或%TN - 9位数字的毫秒数(000000000-999999999),比如“069000000”
- %tp或%Tp - 特定于语言环境的上午或下午标记,比如“下午”,“PM”
- %tz或%Tz - 相对于GMT RFC 82格式的数字时区偏移量,比如“+0800”
- %tZ或%TZ - 时区的缩写形式,比如“CST”
- %ts或%Ts - 1970-01-01 00:00:00到现在经过的秒数,比如“1474014750”
- %tQ或%TQ - 1970-01-01 00:00:00到现在经过的毫秒数,比如“1474014803930”
-
常见的日期和时间组合的格式:
- %tF或%TF - “年年年年-月月-日日”格式,比如“2016-09-16”
- %tD或%TD - “日日/月月/年年”格式,比如“09/16/16”
- %tr或%Tr - 相当于“%tI:%tM:%tS %tp”
- %tT或%TT - 相当于“%tH:%tM:%tS”
- %tR或%TR - 相当于“%tH:%tM”
不与参数对应的格式说明符
语法:%[标识][最小宽度]转换方式
其中,标识和最小宽度的定义同上一节。
转换方式分为以下几类:
- 常规类型
- 字符类型
-
数值:
- 时间/日期
- 百分比
- 行分隔符
例子:
package cn.timd.test_package;
public class Demo {
public static void main(String[] args){
System.out.println(String.format("name:%10s, grade:%02.2f", "lilei", 88.7f));
Object sendData[] = new Object[2];
sendData[0] = new String("lilei");
sendData[1] = new Float(88.7f);
System.out.println(String.format("name:%10s, grade:%02.2f", (Object [])sendData));
}
}
运行结果:
name: lilei, grade:88.70
name: lilei, grade:88.70