位于上海,服务全国!

位于上海,服务全国!

Java编程中的Java Formatter是什么?

作者:admin 分类: 时间:2017-03-30 21:13:02 点击量:2365

Java Formatter是一个实用程序类,可以在Java中使用格式化流输出时使生存变得简单。 它的构建类似于C / C ++ printf函数。 它用于将数据格式化并输出到特定目的地,例如字符串或文件输出流。 本文探讨了这个类,并说明它在Java日常编程中的一些用途。

概述
Java Formatter类在java.util包中被定义,并被声明为final。 因此,它不能被扩展或分类。 Formatter类实现了Closeable和Flushable接口。 从Closeable接口派生的close()方法是由这个类定义的,以释放任何被保存的资源,例如打开的文件,流等。 并且,调用从Flushable接口派生的flush()方法将缓冲输出写入底层流。

通过printf函数可以显示格式化数据的方法,就像C的printf风格格式化函数一样。 此功能特别适用于将格式化的输出显示到标准输出流。 使用Java的printf样式函数格式化输出是很好的,但Java Formatter类对此实用程序有更远的使用。 在这个类的帮助下,我们可以将格式化的输出发送到其他输出流或设备,如GUI组件或除了标准输出之外的文件。 它提供与printf相同的格式化功能,例如布局对齐,对齐,数字格式,字符串,日期,时间数据和特定于区域设置的输出。 它基本上将二进制数据格式转换成格式化的文本并将其存储到缓冲区中。 它提供一个默认缓冲区,或者我们可以在创建时提供一个缓冲区。

格式化设计
这个类提供了许多重载的构造函数,我们可以在调用期间显式提供一个可附加缓冲区。 可附加接口表示附加有效unicode字符序列和值的对象。 还有其他构造函数,我们可以提供一个File对象,OutputStream对象或者PrintStream对象。 例如,一些常用的构造函数如下:

Formatter(): 它是一个无参数的构造函数用以创建一个Formatter对象。 它运行于由StringBuilder创建的默认缓冲区。 它是所有类型的常用构造函数。
格式化器(可附加a): 在此,Appendable对象特指格式化输出的缓冲区。 但是,如果值为空,则该对象自动创建一个Stringbuilder来保存格式化的输出。
格式化器(可附加a,区域设置loc): 区域设置对象根据指定的区域设置区分输出格式。 如果未指定,则使用默认区域。 有时,需要根据地理政治或文化敏感数据来定制输出,例如格式化日期和时间,替换一个特定区域的小数分隔符等的区域设置。
格式化器(File文件): 该构造函数的file参数指定一个对要输出打开文件的引用。

一旦格式化对象被创建,它可以以许多方式使用。 格式说明符指定数据格式化的方式。 有关它们的完整文档,请参阅Java API文档。 一些常见的格式说明符是:

%S or %s: Specifies String
%X or %x: Specifies hexadecimal integer
%o: Specifies Octal integer
%d: Specifies Decimal integer
%c: Specifies character
%T or %t: Specifies Time and date
%n: Inserts newline character
%B or %b: Specifies Boolean
%A or %a: Specifies floating point hexadecimal
%f: Specifies Decimal floating point
一般,字符和数字类型的格式说明符应用应符合如下语法:

%[argument_index$][flags][width][.precision]conversion
argument_index是可选的,整数值1 $,2 $,以及代表第一个,第二个参数等等。
可选标志表示修改输出格式的字符。
可选宽度表示要在输出中写入最少字符数。
可选精度表示定义一个浮点值精度的正十进制整数值。
转换不是可选的; 它表示参数数据类型,例如整数的%d,字符串的%s等。
一些简单的例子

Using argument_index
Formatter f=new Formatter();
f.format("%3$3s %2$3s %1$3s", "fear",
   "strengthen", "weakness");
System.out.println(f);

StringBuilder builder=new StringBuilder();

Formatter f=new Formatter(builder);
f.format(Locale.FRANCE,"%.5f", -1325.789);
System.out.println(f);

Formatter f2=new Formatter();
f2.format(Locale.CANADA, "%.5f", -1325.789);
System.out.println(f2);
Regionalize Date
Formatter f3=new Formatter();
f3.format(Locale.FRENCH,"%1$te %1$tB, %1$tY",
   Calendar.getInstance());
System.out.println(f3);

Formatter f4=new Formatter();
f4.format(Locale.GERMANY,"%1$te %1$tB, %1$tY",
   Calendar.getInstance());
System.out.println(f4);
Using %n and %% Specifiers
Formatter f = new Formatter();
f.format("Format%n %.2f%% complete", 46.6);
System.out.println(f);
结论
虽然Formatter实现了AutoCloseable接口,但是在close()函数的帮助下,特别是处理文件时,关闭Formatter实例较好。 这样就释放了所用资源。 将一个输出格式化到控制台时最好使用printf,因为它会自动使用Formatter与System.out。应该注意的是,Formatter不具有线程安全性。 因此,应谨慎使用多线程访问。