Java™ 教程(格式化流)

48次阅读

共计 2090 个字符,预计需要花费 6 分钟才能阅读完成。

格式化流
实现格式化的流对象是 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.
i 和 r 变量格式化两次:第一次使用 print 重载方法的代码,第二次通过 Java 编译器自动生成的转换代码,其使用 toString,你可以通过这种方式格式化任何值,但你无法控制结果。
format 方法
format 方法根据格式字符串格式化多个参数,格式字符串由嵌入格式说明符的静态文本组成,除格式说明符外,格式字符串输出不变。
格式字符串支持许多功能,在本教程中,我们将介绍一些基础知识,有关完整说明,请参阅 API 规范中的格式字符串语法。
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 个字符的转换结束,该转换指定生成的格式化输出类型,这里使用的三个转换是:

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
附加元素都是可选的,下图显示了较长的说明符如何分解为元素。

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

Precision,对于浮点值,这是格式化值的数学精度,对于 s 和其他常规转换,这是格式化值的最大宽度,如有必要,该值将被截断。

Width,格式化值的最小宽度,如有必要,将填充该值,默认情况下,该值使用空格填充。

Flags,指定其他格式选项,在 Format 示例中,+ 标志指定应始终使用符号格式化数字,0 标志指定 0 是填充字符。其他标志包括 —(在右边填充)和(带有特定于语言环境的千位分隔符的格式号),请注意,某些标志不能与某些其他标志一起使用或与某些转换一起使用。

Argument Index,参数索引允许你显式匹配指定的参数,你还可以指定 < 以匹配与前一个说明符相同的参数,因此,这个例子可以写为:System.out.format(“%f, %<+020.10f %n”, Math.PI);

上一篇:扫描

正文完
 0