JAVA String.format方法使用介绍


  在JDK1.5中,String类增加了一个十分有用的静态函数format(String  format, Objece...  argues), 可以将各类数据 格局化为字符串并输出 。其中format参数指定了输出的 格局,是最复杂也是最难 主宰的丝毫,而argues则是一系列等 待被 格局化的对象 。该函数对c语言中printf函数的用法进行了 定然的摹仿, 因此有c语言 根底的人学起来会轻松许多 。下面我们着重 探讨一下format 参数的 格局及 含意 。

  format参数中 可以包括不需求转化的字符串,这些字符串是你写什么,最终就输出什么 。同时还包括一些特殊 格局的内容,来指定将哪个对象来转换,以及转 换成什么 模式 。这种特殊的 格局 通通以%index$开头,index从1开始取值, 示意将第index个参数拿进来进行 格局化 。这丝毫比c语言要强丝毫, c语言不得不依照参数的顺序 顺次 格局化,而java 可以 取舍第n个参数来 格局化 。因为该函数 可以对任意一个对象进行 格局化,不同的对象 实用的参数也不同,因 此我们下面分类来 探讨 。

  1.对整数进行 格局化:%[index$][标识][最小宽度]转换 模式

  我们 可以看到, 格局化字符串由4 部分构成,其中%[index$]的 含意我们上面已经讲过,[最小宽度]的 含意也很好 了解,便是最终该整数转化的字符串 起码包括多少位数字 。我们来看看剩下2个 部分的 含意吧:

  标识:

  '-'    在最小宽度内左对齐,不 可以与“用0填充”同时 使用

  '#'    只 实用于8进制和16进制,8进制时在 后果前面增加一个0,16进制时在 后果前面增加0x

  '+'    后果总是包括一个符号(一般状况下只 实用于10进制,若对象为BigInteger才 可以用于8进制和16进制)

  '  '    正值前加空格,负值前加负号(一般状况下只 实用于10进制,若对象为BigInteger才 可以用于8进制和16进制)

  '0'    后果将用零来填充

  ','    只 实用于10进制,每3位数字中间用“,”分隔

  '('    若参数是负数,则 后果中不增加负号而是用圆括号把数字括起来(同‘+’ 存在同样的 制约)

  转换 模式:

  d-十进制   o-八进制   x或X-十六进制

  上面的 注明过于 单调,我们来看几个具体的例子 。需求特殊 留神的丝毫是:大 部分标识字符 可以同时 使用 。

  System.out.println(String.format("%1$,09d", -3123));

  System.out.println(String.format("%1$9d", -31));

  System.out.println(String.format("%1$-9d", -31));

  System.out.println(String.format("%1$(9d", -31));

  System.out.println(String.format("%1$#9x", 5689));

  // 后果为:

  //-0003,123

  //      -31

  //-31

  //     (31)

  //   0x1639

  2.对浮点数进行 格局化:%[index$][标识][ 起码宽度][.精度]转换 模式

  我们 可以看到,浮点数的转换多了一个“精度”选项, 可以操纵小数点后面的位数 。

  标识:

  '-'    在最小宽度内左对齐,不 可以与“用0填充”同时 使用

  '+'    后果总是包括一个符号

  '  '    正值前加空格,负值前加负号

  '0'    后果将用零来填充

  ','    每3位数字中间用“,”分隔(只 实用于fgG的转换)

  '('    若参数是负数,则 后果中不增加负号而是用圆括号把数字括起来(只 实用于eEfgG的转换)

  转换 模式:

  'e', 'E'  --  后果被 格局化为用计算机科学记数法 示意的十进制数

  'f'          --  后果被 格局化为十进制一般 示意 模式

  'g', 'G'    --  依据具体状况,自动 取舍用一般 示意 模式还是科学计数法 模式

  'a', 'A'    --   后果被 格局化为带有效位数和指数的十六进制浮点数

  3.对字符进行 格局化:

  对字符进行 格局化是十分 方便的,c 示意字符,标识中'-' 示意左对齐, 其余就没什么了 。

  4.对百分比符号进行 格局化:

  看了上面的 注明,大家会发现百分比符号“%”是特殊 格局的一个前缀 。那么我们要输入一个百分比符号该怎么办呢? 确定是需求转义字符的,然而要 留神的是,在这里转义字符不是“”,而是“%” 。换句话说,下面这条语句 可以输出一个“12%”:

  System.out.println(String.format("%1$d%%", 12));

  5. 获得平台独立的行分隔符:

  System.getProperty("line.separator") 可以 获得平台独立的行分隔符,然而用在format中间未免显得过于 繁琐了 。于是format函数自带了一个平台独立的行分隔符那便是String.format("%n") 。

  6.对日期类型进行 格局化:

  以下日期和 工夫转换的后缀字符是为 't' 和 'T' 转换定义的 。这些类型 类似于但不 彻底等同于那些由 GNU date 和 POSIX strftime(3c) 定义的类型 。提供 其余转换类型是为了 拜访特定于 Java 的 性能(如将 'L' 用作秒中的毫秒) 。

  以下转换字符用来 格局化 工夫:

  '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'     有关于 GMT 的 RFC 822 格局的数字时区偏移量,例如 -0800 。

  'Z'     示意时区缩写 模式的字符串 。Formatter 的语言环境将取代参数的语言环境(假如有) 。

  's'     自协调世界时 (UTC) 1970 年 1 月 1 日 00:00:00 至现在所 通过的秒数,即 Long.MIN_VALUE/1000 与 Long.MAX_VALUE/1000 中间的差值 。

  'Q'     自协调世界时 (UTC) 1970 年 1 月 1 日 00:00:00 至现在所 通过的毫秒数,即 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" 。