实现格式化的流对象是一个字符流PrintWriter类或 一个字节流PrintStream类的实例 。
注意:您可能 唯一需要的PrintStream对象是 System.out和 System.err。(有关这些对象的更多信息,请参见命令行中的I / O。)需要创建格式化的输出流时,请实例化PrintWriter,而不要实例化PrintStream。
像所有字节和字符流对象一样,PrintStream和PrintWriter的实例实现一组用于简单字节和字符输出的标准write方法。此外,PrintStream和PrintWriter都实现了将内部数据转换为格式化输出的相同方法集。 提供了两种格式设置:
print和println以标准方式格式化各个值。format根据格式字符串对几乎任何数量的值进行格式化,并提供许多用于精确格式化的选项。
使用适当的方法print与println方法toString转换值后,调用print或println输出单个值。我们可以在Root示例中看到 :
public class Root {public static void main(String[] args) {int i = 2;double r = Math.sqrt(i);System.out.print("The square root of ");System.out.print(i);System.out.print(" is ");System.out.print(r);System.out.println(".");i = 5;r = Math.sqrt(i);System.out.println("The square root of " + i + " is " + r + ".");}}
这是Root输出:
The square root of 2 is 1.4142135623730951.The square root of 5 is 2.23606797749979.
<br />i和r变量被格式化两次:第一次使用重载打印代码,第二次使用Java编译器自动生成的转换代码,该代码也使用toString。 您可以通过这种方式设置任何值的格式,但是您对结果没有太多控制权。
format方法
format方法基于格式字符串(format string)格式化多个参数。格式字符串由嵌入格式说明符(format specifiers)的静态文本组成; 除格式说明符外,格式字符串不变地输出。
格式字符串支持许多功能。在本教程中,我们将仅介绍一些基础知识。有关完整说明,请参见 format string syntaxAPI规范。Root2示例通过一次format调用来格式化两个值:
public class Root2 {public static void main(String[] args) {int i = 2;double r = Math.sqrt(i);System.out.format("The square root of %d is %f.%n", i, r);}}
这是输出:
The square root of 2 is 1.414214.
像本示例中使用的三个格式说明符一样,所有格式说明符均以%开头,并以1或2个字符的转换(conversion)结尾,转换指定要生成的格式化输出的种类。这里使用的三种转换是:
d将整数值格式化为十进制值。f将浮点值格式化为十进制值。n输出平台特定的行终止符。
以下是一些其他转换:
x将整数格式化为十六进制值。s将任何值格式化为字符串。tB将整数格式化为特定于语言环境的月份名称。
还有许多其他转换。
注意:
除了%%和%n之外,所有格式说明符都必须与参数匹配。如果没有,则抛出异常。
在Java编程语言中,\n转义符始终生成换行符(\u000A)。除非特别需要换行符\n,否则不要使用。要获取适用于本地平台的正确的行分隔符,请使用%n。
除转换外,格式说明符还可以包含几个其他元素,以进一步自定义格式化输出。这是示例Format, 其中使用了每种可能的元素。
public class Format {public static void main(String[] args) {System.out.format("%f, %1$+020.10f %n", Math.PI);}}
这是输出:
3.141593, +00000003.1415926536
附加元素都是可选的。下图显示了较长的说明符如何分解为元素。
格式说明符的元素。
元素必须按照显示的顺序出现。从右侧开始,可选元素为:
- 精度。对于浮点值,这是格式化值的数学精度。对于
s和其他常规转换,这是格式化值的最大宽度;如果需要,该值将被右截断。 - 宽度。格式化值的最小宽度;如果需要,将填充该值。默认情况下,该值用空格左填充。
- 标志指定其他格式选项。在
Format示例中,+标志指定数字应始终以符号格式化,0标志指定0为填充字符。其他标志包括-(右侧的填充符)和,(带有特定于语言环境的千位分隔符的格式编号)。请注意,某些标志不能与其他某些标志或某些转换一起使用。 - 参数索引可以让你明确地匹配指定的参数。您还可以指定
<,匹配与前一个说明符相同的参数。因此,该示例可能会说:System.out.format("%f, %<+020.10f %n", Math.PI);
