java 格式化输出

2016-05-21 22:27:56   最后更新: 2016-05-21 22:27:56   访问数量:771




自 java1.5 开始,java 提供了格式化到字符串的功能,主要有以下四个使用方法:

  1. String 类提供了静态方法 format(),他与 C 语言中的标准输出参数列表非常类似,可以实现将不同的参数组合成格式化后的 String 对象
  2. 同时 java 还提供了 System.out.printf 以便于直接输出格式化 String
  3. java.util.Formatter 新增类实现了很强大的转换方法,上述的两种方法事实上都是通过调用该类实现的
  4. java.text.Format 类是一个用于格式化语言环境敏感的信息(如日期、消息和数字)的抽象基类

 

通配符

与 C 语言中的 printf 参数列表非常类似,java 格式化方法的 format 参数也是通过通配符的基本字符串表示的:

java 格式化文本通配符
通配符说明示例
%sString"java1.5"
%cchar'm'
%bbooleantrue
%dint(十进制)99
%xint(十六进制)FF
%oint(八进制)77
%ffloat(十进制)99.99
%afloat(十六进制)FF.35AE
%e指数类型9e+5
%g通用浮点类型(选取浮点表示法与指数表示法中较短的一种) 
%h散列码 
%%%%
%n换行符\n
%tx日期与时间Date 对象

 

下面展示了基本的用法:

package com.techlog.test.service; import java.util.Formatter; /** * just for test * Created by techlog on 2016/5/21. */ public class ForTest { public static void main(String[] argv) { Formatter formmater = new Formatter(System.out); formmater.format("Hi, %s%n", "Lisa"); } }

 

这里,我们使用了 System.out 作为参数创建 Formatter 对象,因此执行 format 方法后会自动输出到标准输出

如果我们使用默认构造器创建 Formatter 对象,不传递任何参数,则 format 方法会返回格式化后的 String(虽然无论用什么参数创建 Formatter 对象,format 方法都会返回格式化后的 String,但是通常我们使用 System.out 创建 Formatter 对象并不关心 format 方法的返回)

 

限定符

同时 java 还未格式化参数提供了限定符标志:

java 格式化限定符
标志说明示例结果
+为正数或者负数添加符号("%+d",15)+15
左对齐("%-5d",15)|15   |
0数字前面补0("%04d", 99)0099
空格在整数之前添加指定数量的空格("% 4d", 99)|  99|
,以“,”对数字分组("%,f", 9999.99)9,999.990000
(使用括号包含负数("%(f", -99.99)(99.990000)
#如果是浮点数则包含小数点,如果是16进制或8进制则添加0x或0("%#x", 99), ("%#o", 99)0x63, 0143
<格式化前一个转换符所描述的参数("%f和%<3.2f", 99.45)99.450000和99.45
$被格式化的参数索引("%1$d,%2$s", 99,"abc")99,abc

 

日期时间的格式化

java 格式化日期时间限定符
限定符说明示例
c包括全部日期和时间信息星期六 十月 27 14:21:20 CST 2007
F“年-月-日”格式2007-10-27
D“月/日/年”格式10/27/07
r“HH:MM:SS PM”格式(12时制)02:25:51 下午
T“HH:MM:SS”格式(24时制)14:28:16
R“HH:MM”格式(24时制)14:28
H2位数字24时制的小时(不足2位前面补0)15
I2位数字12时制的小时(不足2位前面补0)03
k2位数字24时制的小时(前面不补0)15
l2位数字12时制的小时(前面不补0)3
M2位数字的分钟(不足2位前面补0)03
S2位数字的秒(不足2位前面补0)09
L3位数字的毫秒(不足3位前面补0)015
N9位数字的毫秒数(不足9位前面补0)562000000
p小写字母的上午或下午标记中:下午,英:pm
z相对于GMT的RFC822时区的偏移量+0800
Z时区缩写字符串CST

 

package com.techlog.test.service; import java.util.Date; import java.util.Formatter; /** * just for test * Created by techlog on 2016/5/21. */ public class ForTest { public static void main(String[] argv) { Date date=new Date(); Formatter formatter = new Formatter(System.out); formatter.format("全部日期和时间信息:%tc%n", date); formatter.format("月/日/年格式:%tD%n", date); formatter.format("HH:MM:SS PM格式(12时制):%tr%n", date); formatter.format("HH:MM:SS格式(24时制):%tT%n", date); formatter.format("年-月-日格式:%tF%n", date); formatter.format("2位数字24时制的小时(不足2位前面补0):%tH%n", date); } }

 

打印出了:

全部日期和时间信息:星期六 五月 21 22:10:55 CST 2016

月/日/年格式:05/21/16

HH:MM:SS PM格式(12时制):10:10:55 下午

HH:MM:SS格式(24时制):22:10:55

年-月-日格式:2016-05-21

2位数字24时制的小时(不足2位前面补0):11

 

java1.5 还为 String 类提供了静态方法 format(),他是通过上面介绍的 Formatter 类实现的,通过他的实现代码,我们就可以一目了然的了解他的用法了,同时,也可以重新来回顾一下 Formatter 类的用法:

/** * @see java.util.Formatter * @since 1.5 */ public static String format(String format, Object... args) { return new Formatter().format(format, args).toString(); }

 

 

同样,System.out.printf 也是通过 Formatter 类实现的:

/** * @since 1.5 */ public PrintStream printf(String format, Object ... args) { return format(format, args); }

 

 

Format 是一个用于格式化语言环境敏感的信息(如日期、消息和数字)的抽象基类,实际的应用中,基本上很少用到

import java.text.MessageFormat; import java.util.Date; /** * 消息格式化类的使用 */ public class TestMsgFormat { public static void main(String[] args) { String msg = "欢迎光临,当前({0})等待的业务受理的顾客有{1}位,请排号办理业务!"; MessageFormat mf = new MessageFormat(msg); String fmsg = mf.format(new Object[]{new Date(), 35}); System.out.println(fmsg); } }

 

 

输出了:

欢迎光临,当前(09-7-29 下午11:17)等待的业务受理的顾客有35位,请排号办理业务!

 






技术帖      c语言      龙潭书斋      java      jdk      格式化      java5      格式化输出      formatter      format      java1.5     


1#Nick : (回复)2016-06-08 11:42:38

多谢总结,便于学习。

京ICP备15018585号