Java格式化字符串

一、语法

通用,字符和数字类型的格式说明符具有以下语法:
%[argument_index$][flags][width][.precision]conversion
argument_index是十进制整数,表示参数列表中参数的位置。第一个参数用"1$“引用,第二个用"2$” 引用,等等。
flags是一组修改输出格式的字符。有效标志集取决于转换。
width是正十进制整数,表示要写入输出的字符之间的间隔。
precision是一个非负十进制整数,通常用于限制字符数。具体行为取决于转换。
conversion是一个字符,指示如何格式化参数。给定参数的有效转换集取决于参数的数据类型。

用于表示日期和时间的类型的格式说明符具有以下语法:
%[argument_index$][flags][width]conversion
可选的argument_indexflagswidth定义如上。
所需的转换是两个字符的序列。第一个字符是’t’或’T’。第二个字符表示要使用的格式。

与参数对应的格式说明符具有以下语法:
%[flags][width]conversion
flagswidth定义如上。

+示例

String s = String.format("%4$2s %3$2s %2$2s %1$2s", "a", "b", "c", "d");
System.out.println(s);//  d  c  b  a
Calendar c = new GregorianCalendar(1995, Calendar.MAY, 23);
String s = String.format("Duke's Birthday: %1$tb %1$te, %1$tY", c);
System.out.println(s);// Duke's Birthday: 五月 23, 1995

1.argument_index

是一个十进制整数,表示参数列表中参数的位置。第一个参数用“ 1$” 引用,第二个用“ 2$” 引用,等等。

2.flags

下表总结了支持的标志。 y表示指示的参数类型支持该标志。

Flag一般字符整数浮点日期/时间描述
‘-’yyyyy结果将是左对齐的
‘#’y1-y3y-结果应使用依赖于转换的替代形式
‘+’--y4y-结果将始终包含一个标志
’ ’--y4y-结果将包括正值的领先空间
‘0’--yy-结果将为零填充
‘,’--y2y5-结果将包括特定于语言环境的分组分隔符
‘(’--y4y5-结果将括号中的负数括起来

注:1取决于的定义Formattable。
2仅限’d’转换。
3 仅适用于’o’,‘x’和’X’转换。
4对于’d’,‘o’,‘x’,和 ‘X’转换应用到BigInteger 或’d’应用到byte,Byte,short,Short,int和Integer,long和Long。
5对’e’,‘E’,‘f’, ‘g’,和’G’唯一的转换。
任何未明确定义为标志的字符都是非法的,并保留用于将来的扩展。

3.width

是正十进制整数,表示要写入输出的字符之间的间隔。

4.precision

对于一般参数类型,precision是要写入输出的最大字符数。
对于浮点转换’a’,‘A’,‘e’, ‘E’,和’f’精度的小数点后的位数。如果转换为’g’或’G’,则精度是舍入后得到的幅度中的总位数。
对于字符,整数和日期/时间参数类型以及百分比和行分隔符转换,精度不适用; 如果提供精度,则抛出异常。

5.conversion

5.1分类

1.常规 - 可以应用于任何参数类型;
2.字符 -可以被应用到基本类型代表Unicode字符:char,Character,byte,Byte,short,和Short。这种转换也可以被施加到所述类型int和Integer时Character.isValidCodePoint(int)返回true;
3.数字
    1).整数 -可应用于Java的整数类型:byte, Byte,short,Short,int和Integer,long,Long,和BigInteger(但不是char或Character);
    2).浮点 -可用于Java的浮点类型: float,Float,double,Double,和BigDecimal。
4.日期/时间 -可以被施加到Java类型,其能够编码的日期或时间的:long,Long,Calendar, Date和TemporalAccessor;
5.百分比 - 产生文字’%’ (’\ u0025’);
6.行分隔符 - 生成特定于平台的行分隔符;

5.2conversion表格

转变论证类别描述
‘b’, ‘B’一般如果参数arg是null,则结果为“ false”。如果arg是a boolean或者Boolean,则结果是返回的字符串String.valueOf(arg)。否则,结果为“true”。
‘h’, ‘H’一般如果参数arg是null,则结果为“ null”。否则,通过调用获得结果 Integer.toHexString(arg.hashCode())。
‘s’, ‘S’一般如果参数arg是null,则结果为“ null”。如果arg实现Formattable,则 arg.formatTo调用。否则,通过调用获得结果arg.toString()。
‘c’, ‘C’字符结果是Unicode字符
‘d’整数结果格式化为十进制整数
‘o’整数结果格式化为八进制整数
‘x’, ‘X’整数结果格式化为十六进制整数
‘e’, ‘E’浮点结果格式化为计算机化科学记数法中的十进制数
‘f’浮点结果格式为十进制数
‘g’, ‘G’浮点结果使用计算机化的科学记数法或十进制格式进行格式化,具体取决于舍入后的精度和值。
‘a’, ‘A’浮点结果被格式化为带有效数和指数的十六进制浮点数。尽管后者属于浮点参数类别,但该类型 不支持此转换
‘t’, ‘T’日期/时间日期和时间转换字符的前缀。请参阅日期/时间conversion表格。
‘%’百分结果是文字’%’(’\ u0025’)
‘n’行分隔符结果是特定于平台的行分隔符

5.3日期/时间conversion表格

为’t’和’T’转换定义了以下日期和时间转换后缀字符
以下转换字符用于格式化时间:

.
‘H’24小时制的一天中的小时,格式化为两位数,必要时为前导零00 - 23。
‘I’12小时制的小时,格式化为两位数,必要时带前导零,即 01 - 12。
‘k’24小时制的一天中的小时,即0 - 23。
‘l’12小时制的小时,即1 - 12。
‘M’在一小时内分钟格式化为两位数,必要时带前导零,即 00 - 59。
‘S’分钟内的秒数,格式化为两位数,必要时带前导零,即00 - 60(“ 60”是支持闰秒所需的特殊值)。
‘L’毫秒内的第二个格式为三位数,必要时带前导零,即000 - 999。
‘N’在秒内的纳秒,格式化为九位数,必要时带前导零,即000000000 - 999999999。
‘p’小写的特定区域的早晨或下午标记,例如“ am”或“ pm”。使用转换前缀会’T’强制此输出为大写。
‘z’RFC 822 样式数字时区偏离GMT,例如-0800。此值将根据夏令时的需要进行调整。对于 long,Long和Date使用的时区是此Java虚拟机实例的默认时区。
‘Z’表示时区缩写的字符串。此值将根据夏令时的需要进行调整。对于 long,Long和Date使用的时区是此Java虚拟机实例的默认时区。Formatter的语言环境将取代参数的语言环境(如果有的话)。
‘s’自1970年1月1日00:00:00UTC 开始以来的秒数 ,即Long.MIN_VALUE/1000到 Long.MAX_VALUE/1000。
‘Q’从1970年1月1日00:00:00UTC 开始的时期开始的毫秒,即Long.MIN_VALUE到 Long.MAX_VALUE。

以下转换字符用于格式化日期:

.
‘B’特定于语言环境的月份全称,例如"January",“February”。
‘b’特定于语言环境缩写月份名称,例如"Jan",“Feb”。
‘h’与…相同’b’。
‘A’特定于区域设置的星期几的全名,例如"Sunday",“Monday”
‘a’特定于区域设置的星期几短名称,例如"Sun",“Mon”
‘C’四位数年份除以100,格式化为两位数,必要时前导零,即00 - 99
‘Y’年份,格式化为至少四位数,必要时带前导零,例如0092等于92公历的CE。
‘y’年份的最后两位数字,必要时格式为前导零,即00 - 99。
‘j’一年中的某一天,格式化为三位数,必要时带前导零,例如001 - 366格里高利历。
‘m’月份,格式化为两位数,必要时带前导零,即01 - 13。
‘d’每月的日期,格式化为两位数,必要时带前导零,即 01 - 31
‘e’每月的一天,格式化为两位数,即1 - 31。

以下转换字符用于格式化常见日期/时间组合:

.
‘R’格式化为24小时制的时间为 “%tH:%tM”
‘T’格式化为24小时制的时间为"%tH:%tM:%tS"。
‘r’格式化为12小时制的时间为"%tI:%tM:%tS %Tp"。上午或下午标记(’%Tp’)的位置可能与场所有关。
‘D’格式为的日期"%tm/%td/%ty"。
‘F’ISO 8601 完整日期格式为"%tY-%tm-%td"。
‘c’日期和时间格式化为"%ta %tb %td %tT %tZ %tY",例如"Sun Jul 20 16:17:00 EDT 1969"。

注:未明确定义为日期/时间转换后缀的任何字符都是非法的,并保留用于将来的扩展。

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

书香水墨

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值