Java格式化输出

Java 格式化输出的总结,主要是对 printfformat 方法的归纳。

设计到的主要类为 java.util.Formatter,本文主要是对 Java8 中相关 API 的简单翻译。

Java 中字符串的样式格式化主要是基于 java.util.Formatter ,这个类提供了布局和对齐,数字的常见格式,字符串,各种日期时间和基于特定语言环境的输出。

格式化程序的线程安全需要用户自己负责。

概要 (Summary)

格式化字符串语法 (Format String Syntax)

每种格式化输出的方法,都需要一个格式化字符串和一个参数列表,格式化字符串中包含固定文本和一个或多个格式说明符

格式说明符的一般语法为:

%[argument_index$][flags][width][.precision]conversion

  • argument_index:可选,是一个十进制整数,表示参数列表中参数的位置。第一个参数由 1$ 引用,第二个由 2$引用等
  • flags:可选,是一组修改输出格式的字符,有效标志集取决于转换类型
  • width:可选,是一个正的十进制整数,表示要写入输出的最小字符数
  • .precision:可选,是一个非负十进制整数,通常用来限制字符数。特定行为取决于转换类型
  • conversion:必须,表明应该如何格式化参数的字符,给定参数的有效转换集取决于参数的数据类型

格式说明符对日期时间的语法为:

%[argument_index$][flags][width]conversion

  • conversion:由两个字符组成,第一个字符是 t 或者 T ,第二个字符表示使用的格式

不符合参数的格式说明符语法为:

%[flags][width]conversion

  • conversion:一个表示在输出中插入内容的字符

转换符 (Conversions)

conversion 主要分为以下几个类别:

  • General :应用于任何参数类型
  • Character :应用于表示 Unicode 字符的基本类型, char, Character, byte, Byte, short, and Short。当 Character.isValidCodePoint(int) 返回为 true 时,也可应用于 int and Integer
  • Numeric:整型和浮点型
  • Date/Time:应用于能够对日期或者时间进行编码的类型 long, Long, Calendar, Date and TemporalAccessor
  • Percent:百分比,产生字面值 % (\u0025)
  • Line Separator:行分隔符,产生特定平台的行分隔符

有的转换符有大写的形式,表示输出的也是转换成大写输出。

转换符说明
'b', 'B'布尔型输出,参数为 null 结果为 false
'h', 'H'哈希值,参数为 null 结果为 null
's', 'S'字符串
'c', 'C'字符
'd'十进制整数
'o'八进制整数
'x', 'X'十六进制整数
'e', 'E'指数浮点数
'f'定点浮点数 3.55000
'g', 'G'通用浮点数
'a', 'A'十六进制浮点数
't', 'T'日期和时间
'%'百分号 %
'n'与平台有关的行分隔符

日期时间转换符 (Date/Time Conversions)

格式化时间转换符
转换符类型说明
'H'两位数 小时数00 ~ 23
'I'两位数 小时数01 ~ 12
'k'小时数0 ~ 23
'l'小时数1 ~ 12
'M'两位数 分钟00 ~ 59
'S'两位数 秒00 ~ 60
'L'毫秒000 ~ 999
'N'纳秒000000000 - 999999999
'p'上下午标志am” or “pm
'z'GMT 起, RFC822 数字位移-0800
'Z'时区PST
's'从 1 January 1970 00:00:00 UTC起的秒数Long.MIN_VALUE/1000 to Long.MAX_VALUE/1000
'Q'从 1 January 1970 00:00:00 UTC起的毫秒数Long.MIN_VALUE to Long.MAX_VALUE
格式化日期转换符
转换符类型说明
'B'完整的月份名称"January", "February"
'b''h'月份名称简写"Jan", "Feb"
'A'星期的全称"Sunday", "Monday"
'a'星期的简写"Sun", "Mon"
'C'年的前两位数字00 - 99
'Y'年份,四位数字2018
'y'年份的后两位数字00 - 99
'j'年中的日子001 - 366
'm'月份01 - 13
'd'月中的日子,两位数01 - 31
'e'月中的日子1 - 31
常用日期格式
转换符说明
'R'Time formatted for the 24-hour clock as "%tH:%tM"
'T'Time formatted for the 24-hour clock as "%tH:%tM:%tS".
'r'Time formatted for the 12-hour clock as "%tI:%tM:%tS %Tp". The location of the morning or afternoon marker ('%Tp') may be locale-dependent.
'D'Date formatted as "%tm/%td/%ty".
'F'ISO 8601 complete date formatted as "%tY-%tm-%td".
'c'Date and time formatted as "%ta %tb %td %tT %tZ %tY", e.g. "Sun Jul 20 16:17:00 EDT 1969".

标志位 (Flags)

Flag应用范围说明
‘-‘全部左对齐
‘#’IntegralFloating Point整型显示进制前缀(0x或0),浮点型显示小数点
‘+’IntegralFloating Point显示正负符号
’ ‘IntegralFloating Point空格,正数前面补充空格
‘0’IntegralFloating Point数字前面补0
‘,’IntegralFloating Point添加分组分隔符,如 3,333.33
‘(‘IntegralFloating Point将负数用小括号括起来,如 -33 变成 (33)

宽度 (Width)

将输出的最少的字符数

精度 (Precision)

general argument types:对常规的参数,输出的最大字符数

conversions 'a', 'A', 'e', 'E', and 'f':浮点型数据,小数点后的位数

conversion 'g' or 'G':浮点型数据,四舍五入后的所有位数

参数索引 (Argument Index)

是一个从 1 开始的十进制整数,第一个是 1$ ,依次类推

< 这个标志可以重用以前的参数

下面两条语句生成的字符串相同:

Calendar c = ...;
String s1 = String.format("Duke's Birthday: %1$tm %1$te,%1$tY", c);
String s2 = String.format("Duke's Birthday: %1$tm %<te,%<tY", c);
  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值