Java Formatter format()方法介绍

x33g5p2x  于2022-09-25 转载在 Java  
字(3.4k)|赞(0)|评价(0)|浏览(1146)

在本文中,我们将介绍 Java Formatter.format 方法。 java.util.Formatter 类用作 printf 样式格式字符串的解释器。 Formatter 可以执行布局对齐、对齐、数字、字符串和日期/时间数据的常用格式。 Formatter 产生特定于语言环境的输出。
要格式化数据,Formatter 有如下 format() 方法。

Formatter format(String format, Object... args)

1. 使用指定的格式和参数将格式化字符串写入此对象的目的地。默认语言环境与在构造Formatter期间使用的语言环境相同。
2. 返回此Formatter。
3. 如果格式字符串包含非法语法、不兼容的格式说明符或参数不足,则会出现 IllegalFormatException
4. 如果参数超过要求,额外的参数将被忽略。

b.

Formatter format(Locale l, String format, Object... args)

使用指定的语言环境、格式和参数将格式化字符串写入此对象的目的地。
在这种方法中,我们可以指定语言环境来格式化字符串,其余与第一种方法相同。

现在在这里我们将讨论初始化 Formatter、格式语法和使用 format() 方法的示例。

1. Formatter的初始化

找到 Formatter 类的一些构造函数。
1.

Formatter()

为此 JVM 实例构造一个具有默认语言环境和默认字符集的新 Formatter。格式化输出的目的地是 StringBuilder
2.

Formatter(Locale l)

为此 JVM 实例构造一个具有指定语言环境和默认字符集的新 Formatter。格式化输出的目的地是 StringBuilder
3.

Formatter(File file)

用指定的文件构造一个新的Formatter。它为此 JVM 实例使用默认语言环境和默认字符集。此Formatter的目标是指定文件。
4.

Formatter(File file, Charset charset, Locale l)

使用指定的文件、字符集和语言环境构造一个新的Formatter。此Formatter的目标是指定的文件。

2. 格式语法和示例

查找 Formatter 类使用的格式语法。
a. 适用于一般、字符和数字类型。

%[argument_index$][flags][width][.precision]conversion

argument_index:参数在参数列表中的位置。例如,第一个参数被“1$”引用,第二个参数被“2$”引用等等。它是可选的。
flags:修改输出格式的字符集。它是可选的。
width:正十进制整数,指示要写入输出的最小字符数。它是可选的。
precision:用于限制字符数的正十进制整数。它是可选的。
conversion:指示参数应如何格式化的字符。这是必需的。

b.:日期和时间。

%[argument_index$][flags][width]conversion

c. 与参数不对应的格式说明符。

%[flags][width]conversion

现在找到例子。

2.1 转化

转换分为常规、字符、数字、日期/时间、百分比和行分隔符等类别。
找到一些转换。
%s 用于字符串数据。
%d 对于整数。
%f 用于浮点数。
%c 用于 Unicode 字符。
%t 日期和时间的前缀。
日期/时间转换后缀是 m 代表月份,e 代表月份中的某天,y 代表年份,H 代表 24 小时制中的一天中的小时,M 代表分钟,S 代表秒。
日期转换可以用作 %tm, %te, %ty, %tH, %tY, %tS 。

例子
1.

Formatter formatter = new Formatter(Locale.US);
String name = "Krishn";
int age = 30;
formatter.format("User name is %s and age is %d", name, age);
System.out.println(formatter);

输出

User name is Krishn and age is 30

2.

Formatter formatter = new Formatter(Locale.US);
Calendar c = new GregorianCalendar();
formatter.format("Birth date: %tm %te,%tY", c, c, c);
System.out.println(formatter);

输出

Birth date: 09 21,2021

2.2 参数索引

参数索引是一个十进制整数,表示参数在参数列表中的位置。 1$ 引用的参数索引用于第一个参数,2$ 用于第二个参数,依此类推。
例子
1.

Formatter formatter = new Formatter(Locale.US);
Formatter f = formatter.format("Numbers: %3$d %1$d %2$d", 10, 20, 30);
System.out.println(f);

输出

Numbers: 30 10 20

2.

Formatter formatter = new Formatter(Locale.US);
Calendar c = new GregorianCalendar();
Formatter f = formatter.format("Birth date: %1$tm %1$te,%1$tY %1$tH:%1$tM:%1$tS", c);
System.out.println(f);

输出

Birth date: 09 21,2021 09:32:26

2.3 标志

'-' 结果将左对齐。
'#' 结果应使用与转换相关的替代形式。
'+' 结果将始终包含一个符号。
' ' 结果将包括正值的前导空格。
'0' 结果将被零填充
',' 结果将包括特定于语言环境的分组分隔符。
'(' 结果将用括号括起来负数。

例子
1.

Formatter formatter = new Formatter();
formatter.format(Locale.GERMAN, "e = %+f", Math.E);
System.out.println(formatter);

输出

e = +2,718282

2.

Formatter formatter = new Formatter();
formatter.format(Locale.ENGLISH, "N = %(,d", -123456);
System.out.println(formatter);

输出

N = (123,456)

2.4 宽度

宽度是要写入输出的最小字符数。

例子

Formatter formatter = new Formatter();
String str = "AB";
formatter.format(Locale.GERMAN, "|%5s|", str);
System.out.println(formatter);

输出

|   AB|

我们可以看到指定的宽度是 5。这意味着输出的最小字符数是 5。由于 str 中只有两个字符,所以其余的都用空格填充。

2.5 精度

对于像 %s 这样的一般转换,精度是要写入输出的最大字符数。
对于像 %f 这样的浮点转换,精度是小数点后的位数。
对于字符、整数和日期/时间转换,精度不适用。

例子
1.

Formatter formatter = new Formatter();
String str = "ABCDE";
formatter.format(Locale.GERMAN, "Data: %.3s", str);
System.out.println(formatter);

输出

Data: ABC

对于 %s,精度是要写入输出的最大字符数。在上面的例子中,精度为 3,所以输出只有3个字符。
2.

Formatter formatter = new Formatter();
formatter.format(Locale.FRANCE, "%2$s = %1$+5.2f", Math.E, "Formatted E");
System.out.println(formatter);

输出

Formatted E = +2,72

在 "%1$+5.2f" 中,参数索引为 1$,标志为 +,宽度为 5,精度为 .2,转换为 f。

相关文章

微信公众号

最新文章

更多