Java格式化字符串

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 - 带有效位数和指数的十六进制浮点数
  • 对字符进行格式化:
    • c或C表示字符,标识中“-”表示左对齐
  • 对百分比符号进行格式化:
    • %%结果为字面值%
  • 取得平台独立的行分隔符:
    • %n结果为独立于平台的行分隔符
  • 对布尔类型进行格式化
    • b或B表示布尔类型
  • 对字符串进行格式化:
    • s或S表示字符串,标识中“-”表示左对齐
  • 对日期类型进行格式化:
    • %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  

感谢浏览tim chow的作品!

如果您喜欢,可以分享到: 更多

如果您有任何疑问或想要与tim chow进行交流

可点此给tim chow发信

如有问题,也可在下面留言: