🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
### [`Formatter`类](https://lingcoder.gitee.io/onjava8/#/book/18-Strings?id=formatter-%e7%b1%bb) 在 Java 中,所有的格式化功能都是由`java.util.Formatter`类处理的。可以将`Formatter`看做一个翻译器,它将你的格式化字符串与数据翻译成需要的结果。当你创建一个`Formatter`对象时,需要向其构造器传递一些信息,告诉它最终的结果将向哪里输出: ~~~ // strings/Turtle.java import java.io.*; import java.util.*; public class Turtle { private String name; private Formatter f; public Turtle(String name, Formatter f) { this.name = name; this.f = f; } public void move(int x, int y) { f.format("%s The Turtle is at (%d,%d)%n", name, x, y); } public static void main(String[] args) { PrintStream outAlias = System.out; Turtle tommy = new Turtle("Tommy", new Formatter(System.out)); Turtle terry = new Turtle("Terry", new Formatter(outAlias)); tommy.move(0,0); terry.move(4,8); tommy.move(3,4); terry.move(2,5); tommy.move(3,3); terry.move(3,3); } } /* Output: Tommy The Turtle is at (0,0) Terry The Turtle is at (4,8) Tommy The Turtle is at (3,4) Terry The Turtle is at (2,5) Tommy The Turtle is at (3,3) Terry The Turtle is at (3,3) */ ~~~ 格式化修饰符`%s`表明这里需要`String`参数。 所有的`tommy`都将输出到`System.out`,而所有的`terry`则都输出到`System.out`的一个别名中。`Formatter`的重载构造器支持输出到多个路径,不过最常用的还是`PrintStream()`(如上例)、`OutputStream`和`File`。你可以在[附录:流式 I/O](https://lingcoder.gitee.io/onjava8/#/././Appendix-IO-Streams)中了解更多信息。