StupidBeauty
Read times:1650Posted at: - no title specified

安卓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);
format("%-3C, %3C", 'd', 0x65);

5      x

D   ,   E

0

使用前置的0来填充数字。(要求指定宽度。)

format("%07d, %03d", 4, 5555);

0000004, 5555

#

使用替代格式(仅支持八进制和十六进制。)

format("%o %#o", 010, 010);
format("%x %#x", 0x12, 0x12);

10 010
12 0x12

宽度 Width )。宽度 ,是一个十进制的整数,指定的是, 要用来表示该参数的最少的字符个数。如果格式 化的结果会比该指定宽度要短,则,会加上填充内容(具体填充的是什么,取决于标志位)。注意,妳无法利用宽度设定来截断某个字段,妳只可能会加宽它:参考精度(precision)以了解如何控制最大宽度。

精度 Precision )。精度 的形式是,一个 . 后面跟着 一个十进制整数,它的意义是:针对 d o x X ,表示最小的数字个数;针对 a A e E f F ,表示小数点后面的数字的最少个数;针对 g G ,表示重要数字的最大个数;针对 s S ,表示字符的最大个数。

转换类型 Conversion type )。 一个或两个字符,说明的是,如何对参数进行解释。 大部分转换都是用单个字符来表示的,但是,日期/时间转换,都是以一个 t 开始并且附带 一个额外的字符,以说明预期的输出。

狠多转换类型都有一个对应的大写符号变种,其作用是,利用相关语系(默认语系或者专门设置给此格式化器的语系)的规则,将格式化结果转换成大写。

下表列出了可用的单字符(不包括日期/时间)转换类型

字符串转换
所有类型的参数都可以接受。对于 Formattable 类型的值,会调用它们的 formatTo 方法;对于其它类型的值,会调用 toString 方法。

s

字符串

format("%s %s", "hello", "Hello");

hello Hello

S

大写字符串

format("%S %S", "hello", "Hello");

HELLO HELLO

字符转换
字节Byte)、字符(Character)、短整数(Short)和整数(Integer(以及那些被封箱为这些类型的基本类型)都可以被当作字符参数接受。其它任意类型都会引发错误。

c

字符

format("%c %c", 'd', 'E');

d E

C

大写字符

format("%C %C", 'd', 'E');

D E

整数转换
ByteShortIntegerLongBigInteger(以及那些被封箱为这些类型的基本类型)都可以被当作整数参数接受。其它任意类型都会引发错误。

d

十进制

format("%d", 26);

26

o

八进制

format("%o", 032);

32

x X

十六进制

format("%x %X", 0x1a, 0x1a);

1a 1A

浮点 数转换
FloatDoubleBigDecimal(以及那些被封箱为这些类型的基本类型)都可以被当作浮点数参数接受。其它任意类型都会引发错误。

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

逻辑 值转换
接受逻辑值(Boolean)。 null 被认为代表假(false),所有其它类型的实例都被当作真(true)。

b B

逻辑值。

format("%b %b", true, false);
format("%B %B", true, false);
format("%b", null);
format("%b", "hello");

true false
TRUE FALSE
false
true

散列 码转换
针对参数调用 hashCode 方法,参数本身可以是任何类型。

h H

十六进制散列值。

format("%h", this);
format("%H", this);
format("%h", null);

190d11
190D11
null

无参数转换

%

一个%字符常量。

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

日期/时间转换
日历Calendar)、日期(Date)和长整数(Long(代表着自UNIX元年(epoch)以来的毫秒数)都可以被接受为日期/时间参数。任何其它类型都会导致错误。UNIX元年指的是1970-01-01 00:00:00 UTC 妳更应当使用 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

公有方法

public  Formatter format  ( String  format,  Object...  args)

自此版本开始引入 应用编程接口级别1

向此格式化器( Formatter )的输出目标中写入一个格式化的字符串。

参数

format

格式化字符串。

args

将要在 format() 方法中使用的参数列表。如果 所提供的参数个数比格式字符串中要求的还要多,则,额外的参数会被无视掉。

返回
  • •. 此格式化器( Formatter )。

抛出异常

IllegalFormatException

可能是以下情况中的一种:格式字符串本身无效;格式字符串与参数不兼容;实际提供的参数个数少于格式字符串所要求的参数个数;及,任何其它无效的情况。

FormatterClosedException

该格式化器( Formatter )已经关闭。

未知美人

Polish model Monika Pietrasinska. Ridiculous.

Your opinions
Your name:Email:Website url:Opinion content:
- no title specified

HxLauncher: Launch Android applications by voice commands

 
Recent comments
2017年4月~2019年4月垃圾短信排行榜Posted at:Thu Sep 26 04:51:48 2024
Qt5.7文档翻译:QWebEngineCookieStore类,QWebEngineCookieStore ClassPosted at:Fri Aug 11 06:50:35 2023盲盒kill -9 18289 Grebe.20230517.211749.552.mp4