博客
关于我
Java格式化字符串
阅读量:352 次
发布时间:2019-03-04

本文共 4188 字,大约阅读时间需要 13 分钟。

文章目录

一、语法

通用,字符和数字类型的格式说明符具有以下语法:

%[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 一般 字符 整数 浮点 日期/时间 描述
‘-’ y y y y y 结果将是左对齐的
‘#’ y1 - y3 y - 结果应使用依赖于转换的替代形式
‘+’ - - y4 y - 结果将始终包含一个标志
’ ’ - - y4 y - 结果将包括正值的领先空间
‘0’ - - y y - 结果将为零填充
‘,’ - - y2 y5 - 结果将包括特定于语言环境的分组分隔符
‘(’ - - y4 y5 - 结果将括号中的负数括起来

注: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"。

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

转载地址:http://ocqr.baihongyu.com/

你可能感兴趣的文章
Ubuntu 安装后无法正常打开——进入grub安全命令行模式
查看>>
C/C++ new和delete使用注意事项
查看>>
Jmeter (一) ----环境搭建
查看>>
性能调优优化思路
查看>>
CodeBase(四)项目总结
查看>>
【ACM】HDU 5640 King‘s Cake
查看>>
java集合框架
查看>>
面向对象的三大特征
查看>>
SpringCloud和SprinBoot之间的关系
查看>>
奇怪的小东西
查看>>
剑指offer打卡Day14:数组中只出现一次的数字
查看>>
使用VSCode配合keil来编写Cortex-M程序
查看>>
电磁兼容的PCB设计(二)
查看>>
i.mx rt系列遇害笔记-----systick被gpio害了
查看>>
零输入响应与零状态响应响应
查看>>
工资核算
查看>>
【keras】利用LSTM做简单的时间序列预测
查看>>
绘图杂记【7】echarts / python 雷达图
查看>>
Python之GUI编程 实现界面化的词云图生成器.exe
查看>>
PySpider 框架基本使用(存入MYSQL)
查看>>