安卓21开发文档翻译:格式化器,Formatter
extends
Object
implements
Closeable
Flushable
java.lang.Object |
|
↳ |
java.util.Formatter |
根据格式字符串 来将所传入的参数格式化 (类似 于C 中的 printf ) 。
狠少有需要直接使用 Formatter 的情况。 有狠多类都提供了便利方法,能够利用到格式化器(formatter)的功能。其中 , format(String, Object...) 是最常用的。 PrintStream 和 PrintWriter 都提供了 format 和 printf 方法 。
格式 化字符串( Format strings ) , 由纯文本和散布于其中的格式化指示器组成,例如: "name: %s weight: %03dkg\n" 。当然 ,作为一个 Java字符串 , Java字符串常量 中 常见 的反斜杠转义符也是可以使用的。
格式 化指示器( Format specifiers ) (例如示例 中的 "%s" 及 "%03d" ) ,以 % 开头 ,它们描述 了该如何对对应的参数进行格式化。 它包含了:一个可选的参数下标;可选的标志位;可选的宽度;可选 的精度;和一个必选的转换类型。 在示例中, "%s" 不包含标志位、不包含宽度、不包含精度, 而 "%03d" 包含标志 位 0 、包含宽度 3 、不包含精度。
并非所有的参数下标、标志位、宽度、精度和转换类型的组合都是有效的。
参数下标 ( Argument index )。 一般情况下,每个格式化指示器都会消费掉传递给 format 的下一个参数。出于本地 化方面的考虑, 可以对参数进行重新排列,以使得, 在输出的字符串中,它们的顺序与它们 被提供的顺序不一样。例如 , "%4$s" , 将第4个参数 ( 4$ )格式 化为一个字符串 ( s ) 。 还可以使用 < 来重用一个参数。例如 , format("%o %<d %<x", 64) 得到 的结果就是 "100 64 40" 。
标志 位( Flags )。有以下可用的标志位:
标志位 |
|||
, |
用于大数字的分组分隔符。(只适用于十进制数。) |
format("%,d", 1024); |
1,234 |
+ |
一定带上符号。(只适用于十进制数。) |
format("%+d, %+4d", 5, 5); |
+ 5 , + 5 |
空格,表示,非负数前面应当带上空格。(只适用于十进制数。) |
format("x% d% 5d", 4, 4); |
x 4 4 |
|
( |
使用括号来包围负数。(只适用于十进制数。) |
format("%(d, %(d, %(6d", 12, -12, -12); |
12 , ( 12 ), ( 12 ) |
- |
左对齐。(要求指定宽度。) |
format("%-6dx", 5);
|
5 x D , E |
0 |
使用前置的0来填充数字。(要求指定宽度。) |
format("%07d, %03d", 4, 5555); |
0000004, 5555 |
# |
使用替代格式。(仅支持八进制和十六进制。) |
format("%o %#o", 010, 010);
|
10 010
|
宽度 ( Width )。宽度 ,是一个十进制的整数,指定的是, 要用来表示该参数的最少的字符个数。如果格式 化的结果会比该指定宽度要短,则,会加上填充内容(具体填充的是什么,取决于标志位)。注意,妳无法利用宽度设定来截断某个字段,妳只可能会加宽它:参考精度(precision)以了解如何控制最大宽度。
精度 ( Precision )。精度 的形式是,一个 . 后面跟着 一个十进制整数,它的意义是:针对 d 、 o 、 x 或 X ,表示最小的数字个数;针对 a 、 A 、 e 、 E 、 f 或 F ,表示小数点后面的数字的最少个数;针对 g 或 G ,表示重要数字的最大个数;针对 s 或 S ,表示字符的最大个数。
转换类型 ( Conversion type )。 一个或两个字符,说明的是,如何对参数进行解释。 大部分转换都是用单个字符来表示的,但是,日期/时间转换,都是以一个 t 开始并且附带 一个额外的字符,以说明预期的输出。
狠多转换类型都有一个对应的大写符号变种,其作用是,利用相关语系(默认语系或者专门设置给此格式化器的语系)的规则,将格式化结果转换成大写。
下表列出了可用的单字符(不包括日期/时间)转换类型:
字符串转换
|
|||
s |
字符串。 |
format("%s %s", "hello", "Hello"); |
hello Hello |
S |
大写字符串。 |
format("%S %S", "hello", "Hello"); |
HELLO HELLO |
字符转换
|
|||
c |
字符。 |
format("%c %c", 'd', 'E'); |
d E |
C |
大写字符。 |
format("%C %C", 'd', 'E'); |
D E |
整数转换
|
|||
d |
十进制。 |
format("%d", 26); |
26 |
o |
八进制。 |
format("%o", 032); |
32 |
x 、 X |
十六进制。 |
format("%x %X", 0x1a, 0x1a); |
1a 1A |
浮点
数转换
|
|||
f |
十进制浮点数。 |
format ( "%f" , 123.456f ); format ( "%.1f" , 123.456f ); format ( "%1.5f" , 123.456f ); format ( "%10f" , 123.456f ); format ( "%6.0f" , 123.456f ); |
123.456001 123.5 123.45600 123.456001 123 |
e 、 E |
工程/指数浮点数。 |
format ( "%e" , 123.456f ); format ( "%.1e" , 123.456f ); format ( "%1.5E" , 123.456f ); format ( "%10E" , 123.456f ); format ( "%6.0E" , 123.456f ); |
1.234560e+02 1.2e+02 1.23456E+02 1.234560E+02 1E+02 |
g 、 G |
十进制或工程计数法,取决于具体值的大小。 |
format("%g %g", 0.123, 0.0000123); |
0.123000 1.23000e-05 |
a 、 A |
十六进制浮点数。 |
format("%a", 123.456f); |
0x1.edd2f2p6 |
逻辑
值转换
|
|||
b 、 B |
逻辑值。 |
format("%b %b", true, false);
|
true false
|
散列
码转换
|
|||
h 、 H |
十六进制散列值。 |
format("%h", this);
|
190d11
|
无参数转换 |
|||
% |
一个%字符常量。 |
format("%d%%", 50); |
50% |
n |
换行。( lineSeparator() 的值。) |
format("first%nsecond"); |
first\nsecond |
也可以使用 Formatter 来将日期和时间格式化,不过呢, 妳更应当使用 SimpleDateFormat ( 可以利用 DateFormat 中的工厂方法 ) 。 由 Formatter 提供的那些工具是低层的,因而就将本地化的工作重担压到了开发者的身上。应当优先使用 getDateInstance() 、 getTimeInstance() 和 getDateTimeInstance() 来获取到能够向人眼显示的日期和时间。那些方法 ,会选用最适合用户的语系的格式化字符串。
最佳 的非本地化形式是 ISO 8601 , 妳可以使用这些格式化字符串来产生出这种形式的字符串: "%tF" (2010-01-22) 、 "%tF %tR" (2010-01-22 13:39) 、 "%tF %tT" (2010-01-22 13:39:15) 或 "%tF %tT%z" (2010-01-22 13:39:15-0800) 。
下表列出 的是当前所支持的日期/时间转换,但是,妳更应当使用 SimpleDateFormat :
日期/时间转换
|
|||
ta |
本地化的星期中日子名字(缩写)。 |
format("%ta", cal, cal); |
Tue |
tA |
本地化的星期中日子名字(完整)。 |
format("%tA", cal, cal); |
Tuesday |
tb |
本地化的月份名字(缩写)。 |
format("%tb", cal); |
Apr |
tB |
本地化的月份名字(完整)。 |
format("%tB", cal); |
April |
tc |
与C语言库函数 asctime(3)类似 的输出结果。 请勿使用。 |
format("%tc", cal); |
Tue Apr 01 16:19:17 CEST 2008 |
tC |
2位数字的世纪数。 |
format("%tC", cal); |
20 |
td |
2位数字的月份内日子号(01-31)。 |
format("%td", cal); |
01 |
tD |
有歧义的美国式的日期格式(MM/DD/YY)。请勿请用。 |
format("%tD", cal); |
04/01/08 |
te |
月份内日子号(1-31)。 |
format("%te", cal); |
1 |
tF |
以ISO 8601 格式表示的完整日期(YYYY-MM-DD)。 |
format("%tF", cal); |
2008-04-01 |
th |
%tb 的同义词。 |
||
tH |
2位、24小时制的时数(00-23)。 |
format("%tH", cal); |
16 |
tI |
2位、12小时制的时数(01-12)。 |
format("%tI", cal); |
04 |
tj |
3位的年中日子号(001-366)。 |
format("%tj", cal); |
092 |
tk |
24小时制的时数(0-23)。 |
format("%tk", cal); |
16 |
tl |
12小时制的时数(1-12)。 |
format("%tl", cal); |
4 |
tL |
毫秒数。 |
format("%tL", cal); |
359 |
tm |
2位的月份号(01-12)。 |
format("%tm", cal); |
04 |
tM |
2位的分钟数。 |
format("%tM", cal); |
08 |
tN |
纳秒数。 |
format("%tN", cal); |
359000000 |
tp |
a.m. 或 p.m. |
format("%tp %Tp", cal, cal); |
pm PM |
tQ |
自UNIX元年(epoch)以来的毫秒数。 |
format("%tQ", cal); |
1207059412656 |
tr |
完整的12小时制的时间( %tI:%tM:%tS %Tp )。 |
format("%tr", cal); |
04:15:32 PM |
tR |
简短的24小时制的时间( %tH:%tM )。 |
format("%tR", cal); |
16:15 |
ts |
自UNIX元年(epoch)以来的秒数。 |
format("%ts", cal); |
1207059412 |
tS |
2位秒数。(00-60)。 |
format("%tS", cal); |
17 |
tT |
完整的24小时制的时间( %tH:%tM:%tS )。 |
format("%tT", cal); |
16:15:32 |
ty |
2位的年份(00-99)。 |
format("%ty", cal); |
08 |
tY |
4位的年份。 |
format("%tY", cal); |
2008 |
tz |
时区针对GMT 的偏移值。 |
format("%tz", cal); |
+0100 |
tZ |
本地化的时区缩写。 |
format("%tZ", cal); |
CEST |
跟其它转换格式一样,日期/时间转换也有大写格式。将 %t 替换成 %T ,就会按照格式化器的语系来将那个字段变成大写的。
数字 的本地化( Number localization )。某些转换 中,会使用本地化的十进制数字,而不是通常的 ASCII 数字。所以 呢,举个例子,以 %d 来格式化 123 ,在英语语系中,结果是 123 ,而在某些阿拉伯语系中,结果是 ١٢٣ 。 这种数字的本地化,只会在以下转换中发生:十进制整数转换 %d ;浮点 数转换 %e 、 %f 和 %g ;所有的日期/时间转换, %t 或 %T 。
线程安全 性( Thread safety )。格式化器不是线程安全的。
•. DateFormat
•. Formattable
•. SimpleDateFormat
自此版本开始引入 应用编程接口级别1
向此格式化器( Formatter )的输出目标中写入一个格式化的字符串。
format |
格式化字符串。 |
args |
将要在 format() 方法中使用的参数列表。如果 所提供的参数个数比格式字符串中要求的还要多,则,额外的参数会被无视掉。 |
•. 此格式化器( Formatter )。
IllegalFormatException |
可能是以下情况中的一种:格式字符串本身无效;格式字符串与参数不兼容;实际提供的参数个数少于格式字符串所要求的参数个数;及,任何其它无效的情况。 |
FormatterClosedException |
该格式化器( Formatter )已经关闭。 |
未知美人
Polish model Monika Pietrasinska. Ridiculous.
HxLauncher: Launch Android applications by voice commands