使用Formatter格式化數(shù)據(jù)需要兩種類型的輸入:
格式字符串定義如何格式化值列表。
格式字符串可以包含靜態(tài)文本和嵌入格式說明符。靜態(tài)文本在格式字符串中作為結果輸出。
格式說明符用于兩個目的。
假設您要打印包含某人的出生日期的文本。以下是此類文本的示例:
January 16, 1970 is Mike"s birth day. Let"s go and celebrate. January 11, 1971 is John"s birth day. Let"s go and celebrate. January 16, 1972 is Jane"s birth day. Let"s go and celebrate. January 16, 1973 is Kite"s birth day. Let"s go and celebrate.
上述文本包含固定文本和格式化文本。 為了重用格式和填寫人名稱和生日我們可以寫一個模板如下:
<month> <day>, <year> is <name>"s birth day. Let"s go and celebrate.
生日日期用尖括號括起來,以及人的姓名。我們可以稱它為占位符。 后來我們可以為占位符提供真正的價值。
要在Formatter類中使用模板,我們將占位符轉換為格式說明符。模板變?yōu)楦袷阶址?/p>
格式說明符以百分號%
開頭。
我們可以重寫可以與Formatter類一起使用的模板字符串,如下所示。
%1$tB %1$td, %1$tY is %2$s"s birth day. Let"s go and celebrate.
在此格式字符串中,%1 $ tB
,%1 $ td
%1 $ tY
和%2 $ s
是格式說明符。
格式字符串中的其余文本,例如“生日,讓我們去慶祝",是固定文本。
以下代碼顯示如何使用上述格式字符串打印格式化文本。
在代碼中,我們創(chuàng)建了一個LocalDate來存儲Mike的生日。
本地日期值和“Mike"成為格式字符串的輸入值。
import java.time.LocalDate; import java.time.Month; public class Main { public static void main(String[] args) { LocalDate dob = LocalDate.of(1971, Month.MAY, 16); System.out.printf( "%1$tB %1$td, %1$tY is %2$s"s birth day. Let"s go and celebrate.", dob, "Mike"); } }
上面的代碼生成以下結果。
格式說明符的一般語法如下:
%<argument-index$><flags><width><.precision><conversion>
%
和轉換
部分是必需的,所有其他部分都是可選的。
格式說明符和%
標記之間沒有空格格式字符串中的格式說明符的開始。
要轉義%
,請使用 %%
。
argument-index $
指定參數(shù)的索引。它有一個整數(shù),后跟一個 $
。
第一個參數(shù)稱為1 $,第二個參數(shù)為2 $,依此類推。我們可以多次參考同一個參數(shù)。
flags
包含一組字符并指定輸出的格式。 flags
的有效值取決于參數(shù)的數(shù)據(jù)類型。
width
指定最小數(shù)目輸出所需的字符。
.precision
的確切含義取決于轉換
指定要輸出的最大字符數(shù)。
對于十進制數(shù), .precision
以點開頭。
。
轉換
(強制部分)指定如何格式化值。
有兩個特殊的格式說明符:
以下代碼顯示如何使用這兩個特殊格式說明符:
public class Main { public static void main(String[] args) { System.out.printf("The rate is 10%%.%nA%nB"); } }
上面的代碼生成以下結果。
The rate is 10%. A B
上面的代碼生成以下結果。
更多建議: