快速业务通道

驯服Tiger: 格式化输出 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-20

驯服Tiger: 格式化输出

时间:2011-01-31 John Zukowski

J2SE 1.4 版原来的计划是包括对格式化输出的支持。可能由于时间限制及这个功能对新版本的发布不起决定作用的缘故,在发表的版本中没有加入这些功能。现在有了 Tiger,对打印带格式的字符串有了内在支持。

对于那些从一开始就使用 Java 编程而从没有接触过 C 的人,或者,对那些对 C 没有足够了解的人,格式化字符串是一些古怪的文本串,它们指定一组变量的输出特性。不是用加号将字符串连接在一起(如 firstName + " " + lastName ),而是提供一个字符串描述输出,并提供参数以在方法调用结束时,替换字符串中的占位符: String s = String.format("%1$s %2$s", firstName, lastName) 。

Formatter 类

首先,让我们分析新的 java.util.Formatter 类。您可能不会经常直接使用这个类,但是它提供了所要进行的格式化的内部机制。在这个类的 Javadoc 中,会看到一个描述所支持的格式化选项的表。这些选项的范围从以类似 %7.4f 这样的格式指定浮点数的精度和位数,到格式化时间的 %tT ,到格式化第三个参数 %3$s 。

用 Formatter 格式化输出分为两步:创建一个 Appendable 对象以存储输出,用 format() 方法将带格式的内容放到这个对象中。下面列出了 Appendable 接口的实现器:

BufferedWriter

CharArrayWriter

CharBuffer

FileWriter

FilterWriter

LogStream

OutputStreamWriter

PipedWriter

PrintStream

PrintWriter

StringBuffer

StringBuilder

StringWriter

Writer

驯服Tiger: 格式化输出(2)

时间:2011-01-31 John Zukowski

在使用 Formatter 类时,可以将实现了这个接口的对象传递给构造函数 Formatter 以把它作为目标。大多数这种类看起来很相似,除了 StringBuilder 类。 StringBuilder 与 StringBuffer 类几乎相同,只有一个大的区别:它不是线程安全的。如果知道要在单线程中构建字符串,就使用 StringBuilder 。如果构建过程会跨越多个线程,则使用 StringBuffer 。清单 1 显示了通常如何开始使用 Formatter :

清单 1. formatter 的典型用法

  StringBuilder sb = new StringBuilder();   Formatter formatter = new Formatter(sb, Locale.US);

创建了 Formatter 类后,用格式化字符串和参数调用其 format() 方法。如果需要使用与传递给出构造函数的不同的 Locale 作为格式化输出的一部分,还可以向 format() 方法传递一个 Locale 对象。清单 2 显示了两种不同的 format() :

清单 2. Formatter 的 format() 方法

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

如果希望得到精度为 10 位数字的 Pi 值,清单 3 中的代码会将这个值放到 StringBuilder 中并打印输出。打印 formatter 对象将显示 Appendable 对象的内容。

清单 3. 演示一个 Formatter

import java.util.Locale; import java.util.Formatter; public class Build {   public static void main(String args[]) {   StringBuilder sb = new StringBuilder();   Formatter formatter = new Formatter(sb, Locale.US);   formatter.format("PI = %12.10f", Math.PI);   System.out.println(formatter);   } }

不要忘记用 -source 1.5 选项编译,否则编译器不会识别变量参数列表。因为格式化输出并将它发送给控制台是一项常见的任务,所以对这种操作提供了方便的方法。我们将在下面对此进行讨论。

PrintStream 支持

PrintStream 类中定义了常见的、分别用于写入标准输出和

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号