文档

Java™ 教程-Java Tutorials 中文版
格式化
Trail: Essential Classes
Lesson: Basic I/O
Section: I/O Streams
Subsection: Scanning and Formatting

格式化

实现格式化的流对象是 PrintWriter,字符流类或 PrintStream,字节流类的实例。


注意: 你可能需要的唯一 PrintStream 对象是 System.outSystem.err。(有关这些对象的更多信息,请参阅命令行中的 I/O from the Command Line。)当你需要创建格式化的输出流时,实例化 PrintWriter,而不是 PrintStream

与所有字节和字符流对象一样,PrintStreamPrintWriter 的实例实现了一组标准的 write 方法,用于简单的字节和字符输出。此外,PrintStreamPrintWriter 都实现了将内部数据转换为格式化输出的同一组方法。提供两个级别的格式:

printprintln 方法

在使用适当的 toString 方法转换值后,调用 printprintln 会输出单个值。我们可以在 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.

ir 变量被格式化两次:第一次在 print 的重载中使用代码,第二次由 Java 编译器自动生成的转换代码,它也使用 toString。你可以通过这种方式格式化任何值,但是你无法控制结果。

format 方法

format 方法基于 format string (格式字符串) 格式化多个参数。格式字符串由嵌入 format specifiers (格式说明符) 的静态文本组成;除格式说明符外,格式字符串输出不变。

格式字符串支持许多功能。在本教程中,我们将只介绍一些基础知识。有关完整说明,请参阅 API 规范中的 format string syntax

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 (转换) 结束,指定生成的格式化输出的类型。这里使用的三个转换是:

以下是其他一些转换:

还有很多其他转换。


注意: 

%%%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

附加元素都是可选的。下图显示了较长的说明符如何分解为元素。

格式说明符的元素

格式说明符的元素。

元素必须按所示顺序出现。从右侧开始,可选元素是:


Previous page: Scanning
Next page: I/O from the Command Line