System.out.printf(String format, String ...args)

来源:互联网 发布:linux boot 大小 编辑:程序博客网 时间:2024/05/20 21:43
printf(String format, String ...args)  

常规

以下常规转换可应用于任何参数类型:

'b''\b'将生成 "true" 或 "false",由 Boolean.toString(boolean) 返回。

如果参数为 null,则结果为 "false"。如果参数是一个 boolean 值或 Boolean,那么结果是由 String.valueOf() 返回的字符串。否则结果为 "true"。

如果给出 '#' 标志,则将抛出 FormatFlagsConversionMismatchException

'B''\B''b' 的大写形式。'h''\h'生成一个表示对象的哈希码值的字符串。

如果参数 arg 为 null,则结果为 "null"。否则,结果为调用Integer.toHexString(arg.hashCode()) 得到的结果。

如果给出 '#' 标志,则将抛出 FormatFlagsConversionMismatchException

'H''\H''h' 的大写形式。's''\s'生成一个字符串。

如果参数为 null,则结果为 "null"。如果参数实现了 Formattable,则调用其formatTo 方法。否则,结果为调用参数的 toString() 方法得到的结果。

如果给出 '#' 标志,且参数不是 Formattable,则将抛出FormatFlagsConversionMismatchException

'S''\S''s' 的大写形式。

以下标志应用于常规转换:

'-' '\-' 将输出左对齐。根据需要在转换值结尾处添加空格 ('\ '),以满足字段的最小宽度要求。如果没有提供宽度,则将抛出 MissingFormatWidthException。如果没有给出此标志,则输出将是右对齐的。 '#' '\#' 要求输出使用替换形式。此形式的定义通过转换指定。

宽度是将向输出中写入的最少字符数。如果转换值的长度小于宽度,则用 '  ' (\ ') 填充输出,直到字符总数等于宽度为止。默认情况下,是在左边进行填充。如果给出 '-' 标志,则在右边进行填充。如果没有指定宽度,则没有最小宽度。

精度是将向输出中写入的最多字符数。精度的应用要先于宽度,因此,即使宽度大于精度,输出也将被截取为 precision 字符。如果没有指定精度,则对字符数没有明确限制。

字符

此转换可应用于 charCharacterbyteByteshort 和 Short。当Character.isValidCodePoint(int) 返回 true 时,此转换也可应用于 int 和 Integer。如果返回false,则将抛出 IllegalFormatCodePointException'c''\c'将参数格式化为《Unicode Character Representation》中描述的 Unicode 字符。在该参数表示增补字符的情况下,它可能是多个 16 位 char

如果给出 '#' 标志,则将抛出 FormatFlagsConversionMismatchException

'C''\C''c' 的大写形式。

'-' 标志是为应用常规转换而定义的。如果给出 '#' 标志,则将抛出FormatFlagsConversionMismatchException

宽度是为了实现常规转换而定义的。

精度不适用。如果指定精度,则将抛出 IllegalFormatPrecisionException

数值

数值转换分为以下几类:

  1. Byte、Short、Integer 和 Long
  2. BigInteger
  3. Float 和 Double
  4. BigDecimal

将根据以下算法对数值类型进行格式化:

数字本地化算法

在获得数字的整数部分、小数部分和指数(适用于数据类型)之后,将应用以下转换:

  1. 将字符串中的每个数字字符 d 都替换为特定于语言环境的数字,该数字是相对于当前语言环境的零数字 z 来计算的;即 d -  '0'  + z
  2. 如果存在小数点分隔符,则用特定于语言环境的小数点分隔符替换。
  3. 如果给出 ',' ('\,') 标志,则插入特定于语言环境的组分隔符,这是通过从最低位到最高位浏览字符串的整数部分并不时插入该语言环境组大小定义的分隔符来实现的。
  4. 如果给出 '0' 标志,则在符号字符(如果有的话)之后、第一个非零数字前插入特定于语言环境的零数字,直到字符串长度等于所要求的字段宽度。
  5. 如果该值为负,并且给出了 '(' 标志,那么预先考虑 '(' ('\('),并追加一个 ')' ('\)')。
  6. 如果该值为负(或者为浮点负零),并且没有给出 '(' 标志,那么预先考虑 '-' ('\-')。
  7. 如果给出 '+' 标志,并且该值为正或零(或者为浮点正零),那么将预先考虑 '+' ('\+')。

如果该值为 NaN 或正无穷大,则分别输出文本字符串 "NaN" 或 "Infinity"。如果该值为负无穷大,那么输出将是 "(Infinity)";否则如果给出 '(' 标志,那么输出将是 "-Infinity"。这些值都没有被本地化。

Byte、Short、Integer 和 Long

以下转换可应用于 byteByteshortShortintIntegerlong 和 Long

'd''\T'将参数格式化为十进制整数。应用本地化算法。

如果给出 '0' 标志,并且值为负,则在符号后填充零。

如果给出 '#' 标志,则将抛出 FormatFlagsConversionMismatchException

'o''\o'将参数格式化为以 8 为基数的整数。不应用本地化。

如果 x 为负,那么结果将是通过将 2n 添加到值中产生的一个无符号值,其中 n 是在适当时候由类 Byte、Short、Integer 或 Long 中的静态 SIZE 字段返回的类型中的位数。

如果给出 '#' 标志,则输出将始终以基数指示符 '0' 开始。

如果给出 '0' 标志,则使用前导零填充输出,这些零被填充到以下任意指示符号后面的字段宽度中。

如果给出 '(''+'、'  ' 或 '、' 标志,则将抛出FormatFlagsConversionMismatchException

'x''\x'将参数格式化为以 16 为基数的整数。不应用本地化。

如果 x 为负,那么结果将为把 2n 添加到值中产生的一个无符号值,其中 n 是在适当时候,由类 Byte、Short、Integer 或 Long 中的静态 SIZE 字段返回的类型中的位数。

如果给出 '#' 标志,则输出将始终以基数指示符 '0x' 开始。

如果给出 '0' 标志,则使用前导零填充输出,这些零被填充到基数指示符或符号(如果存在)后面的字段宽度中。

如果给出 '(''  ''+' 或 '、' 标志,则将抛出FormatFlagsConversionMismatchException

'X''\X''x' 的大写形式。将表示数字的整个字符串转换为大写,其中包括 'x' (如果有的话) 和所有十六进制数字 'a' - 'f' ('\a' - '\f')。

如果该转换是 'o''x' 或 'X' 转换,并且给出了 '#' 和 '0' 标志,那么结果将包含基数指示符(对于八进制是 '0',对于十六进制是 '0' 或 "0x")、一定数量的零(基于宽度)和该值。

如果没有给出 '-' 标志,则在符号前填充空格。

printf(String format, String ...args)  

以下标志应用于数值整数转换:

'+''\+'要求所有正数的输出都包含一个正号。如果没有给出此标志,则只有负值包含符号。

如果同时给出了 '+' 和 '  ' 标志,则将抛出 IllegalFormatFlagsException

'  ''\ '对于非负值的输出,要求包括单个额外空格 ('\ ')。

如果同时给出了 '+' 和 '  ' 标志,则将抛出 IllegalFormatFlagsException

'0''\0'要求将前导零填充到输出中,这些零被填充到以下任意符号或基数指示符之后,以达到最小字段宽度,转换 NaN 或无穷大时除外。如果没有提供宽度,则将抛出MissingFormatWidthException

如果同时给出 '-' 和 '0' 标志,则将抛出 IllegalFormatFlagsException

',''\,'要求输出包括在本地化算法的“群”一节中描述的特定于语言环境的组分隔符。'(''\('要求输出预先考虑 '(' ('\('),并将 ')' ('\)') 追加到负值中。

如果没有给出标志,则默认格式设置如下:

  • width 中的输出是右对齐的
  • 负数以 '-' ('\-') 开始
  • 正数和零不包括符号或额外的前导空格
  • 不包括组分隔符

宽度是将向输出中写入的最少字符数。这包括所有符号、数字、组分隔符、基数指示符和圆括号。如果转换值的长度小于宽度,则用空格('\ ') 填充输出,直到字符总数等于宽度。默认情况下,在左边进行填补。如果给出 '-' 标志,则在右边进行填补。如果没有指定宽度,则没有最小宽度。

精度不适用。如果指定精度,则将抛出 IllegalFormatPrecisionException

BigInteger

以下转换可应用于 BigInteger

'd''\T'要求将输出格式化为十进制整数。应用本地化算法。

如果给出 '#' 标志,则将抛出 FormatFlagsConversionMismatchException

'o''\o'要求将输出格式化为以 8 为基数的整数。不应用本地化。

如果 x 为负,那么结果将是以 '-' ('\-') 开始的有符号值。允许对这种类型使用有符号输出,因为它不同于基本类型,在没有假定显式数据类型大小的情况下,不可能创建无符号的等效值。

如果 x 为正数或零,且给出了 '+' 标志,那么结果是以 '+' ('\+') 开始的。

如果给出 '#' 标志,那么输出将始终以 '0' 前缀开始。

如果给出 '0' 标志,那么将使用前导零填充输出,这些零被填充到指示符后的字段宽度中。

如果给出 ',' 标志,则将抛出 FormatFlagsConversionMismatchException

'x''\x'要求将输出格式化为以 16 为基数的整数。不应用本地化。

如果 x 为负,那么结果是以 '-' ('_apos;) 开始的有符号值。此类型允许使用有符号输出,因为与基本类型不同,如果不假定明确的数据类型大小,则不可能创建无符号的等效数。

如果 x 为正数或零,且给出了 '+' 标志,那么结果以 '+' ('\+') 开始。

如果给出 '#' 标志,那么输出将始终以基数指示符 '0x' 开始。

如果给出 '0' 标志,那么将使用前导零填充输出,这些零被填充到基数指示符或符号(如果存在)后面的字段宽度中。

如果给出 ',' 标志,则将抛出 FormatFlagsConversionMismatchException

'X''\X''x' 的大写形式。将表示数字的整个字符串转换为大写,其中包括 'x'(如果有的话)和所有十六进制数字 'a' - 'f' ('\a' - '\f')。

如果该转换是 'o''x' 或 'X',并且给出了 '#' 和 '0' 标志,那么结果将包含基数指示符(对于八进制是 '0',对于十六进制是 '0' 或 "0x")、一定数量的零(基于宽度)和该值。

如果给出 '0' 标志,并且值为负,则在符号后填充零。

如果没有给出 '-' 标志,则在符号前填充空格。

应用为 Byte、Short、Integer 和 Long 定义的所有标志。没有给出标志时的默认行为与 Byte、Short、Integer 和 Long 的行为相同。

宽度的规范与为 Byte、Short、Integer 和 Long 定义的规范相同。

精度不适用。如果指定精度,则将抛出 IllegalFormatPrecisionException

Float 和 Double

以下转换可应用于 floatFloatdouble 和 Double

'e''\e'要求使用科学记数法来格式化输出。应用本地化算法。

数值 m 的格式取决它的值。

如果 m 是 NaN 或无穷大,则分别输出文本字符串 "NaN" 或 "Infinity"。这些值都没有被本地化。

如果 m 是正零或负零,则指数将是 "+00"

否则,结果是表示变量的符号和大小(绝对值)的字符串。符号的格式在本地化算法中已经描述。数值 m 的格式取决它的值。

让 n 成为满足 10n <= m < 10n+1 的惟一整数;让 a 成为 m 和 10n 的精确算术商数值,且满足 1 <= a < 10。然后将该数值解释为 a 的整数部分,因为是一个小数位数,所以后面跟着小数点分隔符,再后面是表示 a 的小数部分的小数位数,后跟指数符号 'e' ('\e'),这之后是指数符号,后跟十进制整数形式表示的 n,它由方法Long.toString(long, int) 产生,并用零填充,使其至少包括两个位数。

在结果中,m 或 a 的小数部分的位数等于精度。如果没有指定精度,则默认值为6。如果精度小于将出现在分别由 Float.toString(float) 或Double.toString(double) 返回的字符串中的小数点之后的位数,则使用四舍五入算法对该值进行舍入运算。否则,可能通过追加零来达到所需精度。要获得该值的规范表示形式,请在适当时候使用 Float.toString(float) 或Double.toString(double)

如果给出 ',' 标志,则将抛出 FormatFlagsConversionMismatchException

'E''\E''e' 的大写形式。指数符号将是 'E' ('\E')。'g''\g'要求将输出格式化为下面描述的常规科学记数形式。应用本地化算法。

在对精度进行舍入运算后,所得数值 m 的格式取决于它的值。

如果 m 大于或等于 10-4 但小于 10精度,则以十进制形式 表示它。

如果 m 小于 10-4 或者大于或等于 10精度,则以计算机科学记数法 表示它。

m 中的总有效位数等于其精度。如果没有指定精度,则其默认值为 6。如果精度为0,则该值将为 1

如果给出 '#' 标志,则将抛出 FormatFlagsConversionMismatchException

'G''\G''g' 的大写形式。'f''\f'要求使用十进制形式来格式化输出。使用本地化算法。

结果是表示参数的符号和大小(绝对值)的字符串。符号的格式在本地化算法中已经描述。数值 m 的格式取决它的值。

如果 m 是 NaN 或无穷大,则将分别输出文本字符串 "NaN" 或 "Infinity"。这些值都没有被本地化。

将数值格式化为 m 的整数部分(不带前导零),后跟小数点分隔符,再后面是表示m 的小数部分的一个或多个十进制数字。

在结果中,m 或 a 的小数部分的位数等于精度。如果没有指定精度,则默认值为6。如果该精度小于将要出现在分别由 Float.toString(float) 或Double.toString(double) 返回的字符串中的小数点之后的位数,则使用四舍五入算法对该值进行舍入运算。否则,可能通过追加零来达到所需精度。要获得该值的规范表示形式,请在适当时候使用 Float.toString(float) 或Double.toString(double)

'a''\a'要求将输出格式化为十六进制指数形式。不应用本地化。

结果是表示参数 x 的符号和大小(绝对值)的字符串。

如果 x 为负值或负零值,那么结果将以 '-' ('\-') 开始。

如果 x 为正值或正零值,且给出了 '+' 标志,那么结果将以 '+' ('\+') 开始。

数值 m 的格式取决它的值。

  • 如果该值是 NaN 或无穷大,则将分别输出文本字符串 "NaN" 或 "Infinity"。
  • 如果 m 等于零,则用字符串 "0x0.0p0" 表示它。
  • 如果 m 是具有标准化表现形式的 double 值,则用子字符串来表示有效位数和指数字段。有效位数是用字符串 "0x1." 表示的,后跟该有效位数小数部分的十六进制表示形式。指数用 'p' ('\p') 表示,后跟无偏指数的十进制字符串,该值是对指数值调用 Integer.toString 所产生的。
  • 如果 m 是具有低正常表现形式的 double 值,则用字符 "0x0." 表示有效位数,后跟该有效位数小数部分的十六进制表示。用 'p-1022' 表示指数。注意,在低正常有效位数中,至少必须有一个非零数字。

如果给出 '(' 或 ',' 标志,则将抛出 FormatFlagsConversionMismatchException

'A''\A''a' 的大写形式。表示数字的整个字符串将被转换为大写形式,其中包括 'x' ('\x') 和 'p' ('\p' 以及所有的十六进制数字 'a' - 'f' ('\a' - '\f')。

应用为 Byte、Short、Integer 和 Long 定义的所有标志。

如果给出 '#' 标志,则将始终存在小数点分隔符。

如果没有给出标志,则默认格式设置如下:

  • width 中的输出是右对齐的。
  • 负数以 '-' 开头
  • 正数和正零不包括符号或额外的前导空格
  • 不包括组分隔符
  • 小数点分隔符只在后面有数字时才出现

宽度是将向输出中写入的最少字符数。这包括可应用的所有符号、数字、组分隔符、小数点分隔符、指数符号、基数指示符、圆括号和表示无穷大和 NaN 的字符串。如果转换值的长度小于宽度,则用空格('\ ') 填充输出,直到字符总数等于宽度。默认情况下,在左边进行填充。如果给出'-' 标志,则在右边进行填充。如果没有指定宽度,则没有最小宽度。

如果转换是 'e''E' 或 'f',则精度是小数点分隔符后的位数。如果没有指定精度,则假定精度为 6

如果转换是 'g' 或 'G' 转换,那么精度就是舍入运算后所得数值的总有效位数。如果没有指定精度,则默认值为 6。如果精度为 0,则该值将为 1

如果转换是 'a' 或 'A' 转换,则精度是小数点分隔符后十六进制数字的位数。如果没有提供精度,则将输出 Double.toHexString(double) 返回的所有数字。

BigDecimal

以下转换可应用于 BigDecimal

'e''\e'要求使用计算机科学记数法对输出进行格式化。应用本地化算法。

数值 m 的格式取决于它的值。

如果 m 为正零或负零,则指数将为 "+00"

否则,结果是表示参数的符号和大小(绝对值)的字符串。符号的格式在本地化算法中已经描述。数值 m 的格式取决于它的值。

让 n 成为满足 10n <= m < 10n+1 的惟一整数;让 a 成为 m 和 10n 的精确算术商数值,且满足 1 <= a < 10。然后将该数值解释为 a 的整数部分,因为是一个小数位数,所以后面跟着小数点分隔符,再后面是表示 a 的小数部分的小数位数,后跟指数符号 'e' ('\e'),这之后是指数符号,后跟十进制整数形式表示的 n,它由方法Long.toString(long, int) 产生,并用零填充,使其至少包括两个位数。

在结果中,m 或 a 的小数部分的位数等于精度。如果没有指定精度,则默认值为6。如果精度小于将出现在分别由 Float.toString(float) 或Double.toString(double) 返回的字符串中的小数点之后的位数,则使用四舍五入算法对该值进行舍入运算。否则,可能通过追加零来达到所需精度。要获得该值的规范表示形式,请使用 BigDecimal.toString()

如果给出 ',' 标志,则将抛出 FormatFlagsConversionMismatchException

'E''\E''e' 的大写形式。指数符号将是 'E' ('\E')。'g''\g'要求将输出格式化为下面描述的常规科学记数形式。应用本地化算法。

在对精度进行舍入运算后,所得数值 m 的格式取决于它的值。

如果 m 大于或等于 10-4 但小于 10精度,则以十进制形式 表示它。

如果 m 小于 10-4 或者大于或等于 10精度,则以计算机科学记数法 表示它。

m 中的总的有效位数等于精度。如果没有指定精度,则默认值为 6。如果精度为 0,则该值将为 1

如果给出 '#' 标志,则将抛出 FormatFlagsConversionMismatchException

'G''\G''g' 的大写形式。'f''\f'要求使用十进制形式来格式化输出。应用本地化算法。

结果是表示参数的符号和大小(绝对值)的字符串。符号的格式在本地化算法中已经描述。数值 m 的格式取决于它的值。

将该数值格式化为 m 的整数部分(不带前导零),后跟小数点分隔符,再后面是表示 m 的小数部分的一个或多个十进制数字。

在结果中,m 或 a 的小数部分的位数等于精度。如果没有指定精度,则默认值为6。如果精度小于将出现在分别由 Float.toString(float) 或Double.toString(double) 返回的字符串中的小数点之后的位数,则使用四舍五入算法对该值进行舍入运算。否则,可能通过追加零来达到所需精度。要获得该值的规范表示形式,请使用 BigDecimal.toString()

应用为 Byte、Short、Integer 和 Long 定义的所有标志。

如果给出 '#' 标志,则将始终存在小数点分隔符。

没有给出标志时的默认行为与 Float 和 Double 的行为相同。

宽度和精度的规范与为 Float 和 Double 定义的规范相同。

日期/时间

此转换可应用于 longLongCalendar 和 Date

't''\t'日期和时间转换字符的前缀。'T''\T''t' 的大写形式。

以下日期和时间转换字符后缀是为 't' 和 'T' 转换定义的。这些类型类似于但不完全等同于 GNUdate 和 POSIX strftime(3c) 定义的那些类型。提供其他转换类型是为了访问特定于 Java 的功能(例如,'L' 用于秒中的毫秒)。

以下转换字符用来格式化时间:

'H''\H'24 小时制的小时,被格式化为必要时带前导零的两位数,即 00 - 2300 对应午夜。'I''\I'12 小时制的小时,被格式化为必要时带前导零的两位数,即 01 - 1201 对应于 1 点钟(上午或下午)。'k''\k'24 小时制的小时,即 0 - 230 对应于午夜。'l''\l'12 小时制的小时,即 1 - 121 对应于上午或下午的一点钟。'M''\M'小时中的分钟,被格式化为必要时带前导零的两位数,即 00 - 59'S''\S'分钟中的秒,被格式化为必要时带前导零的两位数,即 00 - 60("60" 是支持闰秒所需的一个特殊值)。'L''\L'秒中的毫秒,被格式化为必要时带前导零的三位数,即 000 - 999'N''\N'秒中的毫微秒,被格式化为必要时带前导零的九位数,即 000000000 - 999999999。此值的精度受基础操作系统或硬件分析的限制。'p''\p'特定于语言环境的上午或下午标记以小写形式表示,例如 "am" 或 "pm"。使用转换前缀 'T' 可以强行将此输出转换为大写形式。(注意,'p' 产生的输出是小写的。而 GNU date 和 POSIX strftime(3c) 产生的输出是大写的。)'z''\z'相对于 GMT 的 RFC 822 格式的数字时区偏移量,例如 -0800'Z''\Z'表示时区的缩写形式的字符串。's''\s'自协调世界时 (UTC) 1970 年 1 月 1 日 00:00:00 至现在所经过的秒数,也就是Long.MIN_VALUE/1000 与 Long.MAX_VALUE/1000 之间的差值。'Q''\O'自协调世界时 (UTC) 1970 年 1 月 1 日 00:00:00 至现在所经过的毫秒数,即Long.MIN_VALUE 与 Long.MAX_VALUE 之间的差值。此值的精度受基础操作系统或硬件分析的限制。

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

'B''\B'特定于语言环境的完整月份名称,例如 "January" 和 "February"'b''\b'特定于语言环境的月份简称,例如 "Jan" 和 "Feb"'h''\h'与 'b' 相同。'A''\A'特定于语言环境的星期几的全称,例如 "Sunday" 和 "Monday"'a''\a'特定于语言环境的星期几的简称,例如 "Sun" 和 "Mon"'C''\C'除以 100 的四位数表示的年份,被格式化为必要时带前导零的两位数,即 00 - 99'Y''\Y'年份,被格式化为必要时带前导零的四位数(至少),例如 0092 等于格里高利历的92 CE。'y''\y'年份的最后两位数,被格式化为必要时带前导零的两位数,即 00 - 99'j''\j'一年中的天数,被格式化为必要时带前导零的三位数,例如,对于格里高利历是 001 - 366001 对应于一年中的第一天。'm''\m'月份,被格式化为必要时带前导零的两位数,即 01 - 13,其中 "01" 是一年的第一个月,("13" 是支持阴历所需的一个特殊值)。'd''\d'一个月中的天数,被格式化为必要时带前导零的两位数,即 01 - 31,其中 "01" 是一个月的第一天。'e''\e'一个月中的天数,被格式化为两位数,即 1 - 31,其中 "1" 是一个月中的第一天。

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

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

应用为常规转换而定义的 '-' 标志。如果给出 '#' 标志,则将抛出FormatFlagsConversionMismatchException

宽度是将向输出中写入的最少字符数。如果转换值的长度小于 width,则用空格('\ ') 来填充输出,直到总字符数等于宽度。默认情况下,在左边进行填充。如果给出 '-' 标志,则在右边进行填充。如果没有指定宽度,则没有最小宽度。

精度不适用。如果指定了精度,则将抛出 IllegalFormatPrecisionException

百分比

该转换不对应于任何参数。

'%'结果是一个字面值 '%' ('\%')

宽度是将向输出中写入的最少字符数,包括 '%'。如果转换值的长度小于 width,则用空格 ('\ ') 来填充输出,直到总字符数等于宽度。在左边进行填充。如果没有指定宽度,则只输出 '%'

应用为常规转换而定义的 '-' 标志。如果提供其他任何标志,则将抛出FormatFlagsConversionMismatchException

精度不适用。如果指定精度,则将抛出 IllegalFormatPrecisionException

行分隔符

该转换不对应于任何参数。

'n'由 System.getProperty("line.separator") 返回的特定于平台的行分隔符。

标志、宽度和精度都不可用。如果提供这三者,则会分别抛出IllegalFormatFlagsExceptionIllegalFormatWidthException 和IllegalFormatPrecisionException

参数索引

格式说明符可以通过三种方式引用参数:

  • 显式索引 是在格式说明符中包含参数索引时使用。参数索引是一个十进制整数,用于指示参数在参数列表中的位置。第一个参数由 "1$" 引用,第二个参数由 "2$" 引用,依此类推。可以多次引用任何一个参数。

    例如:

       formatter.format("%4$s %3$s %2$s %1$s %4$s %3$s %2$s %1$s",                      "a", "b", "c", "d")     // -> "d c b a d c b a"   
  • 相对索引 是在格式说明符中包含 '<' ('\< TT>) 标志时使用,该标志将导致重用以前格式说明符的参数。如果不存在以前的参数,则抛出 MissingFormatArgumentException
        formatter.format("%s %s %<s %<s", "a", "b", "c", "d")      // -> "a b b b"      // "c" and "d" are ignored because they are not referenced   
  • 普通索引 在格式说明符中既不包含参数索引也不包含 '<' 标志时使用。每个使用普通索引的格式说明符都分配了一个连续隐式索引,分配在独立于显式索引或相对索引使用的参数列表中。
       formatter.format("%s %s %s %s", "a", "b", "c", "d")     // -> "a b c d"   

可能有一个使用所有索引形式的格式字符串,例如:

   formatter.format("%2$s %s %<s %s", "a", "b", "c", "d")     // -> "b a a b"     // "c" and "d" are ignored because they are not referenced
转自:http://hankjin.blog.163.com/blog/static/3373193720076128375340/
原创粉丝点击