Java格式化類Format解讀
Format介紹
java.text.Format是Java格式化的抽象基類。主要用于將對象格式化為指定模式的字符串,或者將指定模式的字符串解析為對象。
Format方法
- format(格式化)
格式化:對象格式化為字符串。
public final String format (Object obj)
public final String format (Object obj) {
return format(obj, new StringBuffer(), new FieldPosition(0)).toString();
}一般使用此方法來將對象格式化為字符串,該方法為不可變方法,方法內(nèi)部調(diào)用抽象方法的具體子類實現(xiàn)。
public abstract StringBuffer format(Object obj, StringBuffer toAppendTo, FieldPosition pos)
抽象方法,子類必須實現(xiàn)該方法,定義子類自己具體的對象格式化為字符串的邏輯。
- parseObject(解析)
解析:字符串解析為對象。
public Object parseObject(String source) throws ParseException
public Object parseObject(String source) throws ParseException {
ParsePosition pos = new ParsePosition(0);
Object result = parseObject(source, pos);
if (pos.index == 0) {
throw new ParseException("Format.parseObject(String) failed",
pos.errorIndex);
}
return result;
}一般使用此方法來將字符串解析為對象,該方法為不可變方法,方法內(nèi)部調(diào)用抽象方法的具體子類實現(xiàn)。
public abstract Object parseObject (String source, ParsePosition pos)
抽象方法,子類必須實現(xiàn)該方法,定義子類自己具體的字符串解析為對象的邏輯。
格式化分類

| 格式化分類 | 格式化類 | 描述 |
|---|---|---|
| 日期時間格式化 | DateFormat | 格式化日期時間的抽象類 |
| SimpleDateFormat | DateFormat的實現(xiàn)類,用于格式化和解析日期時間,非線程安全 | |
| ClassicFormat | DateTimeFormatter的內(nèi)部類,提供日期時間的格式化和解析 | |
| 數(shù)字格式化 | NumberFormat | 格式化數(shù)字的抽象類 |
| DecimalFormat | NumberFormat的實現(xiàn)類,提供數(shù)字格式化和解析 | |
| ChoiceFormat | NumberFormat的實現(xiàn)類,可以根據(jù)特定的值范圍來選擇相應(yīng)的格式 | |
| 字符串格式化 | MessageFormat | 用于字符串格式化的類。它可以將帶有占位符的模板字符串和對應(yīng)的參數(shù)值進行格式化 |
| String | String類的format方法用于字符串的格式化 |
日期時間格式化
1. DateFormat
日期格式化抽象類,根據(jù)當(dāng)前語言環(huán)境格式化日期和時間。
因為DateFormat是一個抽象類,所以不能直接new創(chuàng)建實例對象。但DateFormat提供了一些靜態(tài)方法便于我們構(gòu)建DateFormat子類的實例。
常用方法
getInstance
獲取格式化的日期時間
- getInstance():輸出樣式:22-8-30 下午4:14
getDateInstance
獲取格式化的日期
| 方法 | 描述 |
|---|---|
| getDateInstance() | 輸出樣式:2022-8-30 |
| getDateInstance(int style) | 指定樣式 |
| getDateInstance(int style, Locale aLocale) | 指定樣式和語言環(huán)境 |
getTimeInstance
獲取格式化的時間
| 方法 | 描述 |
|---|---|
| getTimeInstance() | 輸出樣式:16:14:32 |
| getTimeInstance(int style) | 指定樣式 |
| getTimeInstance(int style, Locale aLocale) | 指定樣式和語言環(huán)境 |
getDateTimeInstance
獲取格式化的日期時間
| 方法 | 描述 |
|---|---|
| getDateTimeInstance() | 輸出樣式:2022-8-30 16:14:32 |
| getDateTimeInstance(int dateStyle, int timeStyle) | 指定樣式 |
| getDateTimeInstance(int dateStyle, int timeStyle, Locale aLocale) | 指定樣式和語言環(huán)境 |
方法入?yún)?/h5>
style
設(shè)置輸出樣式。
DateFormat提供了多種輸出樣式:
/**
* 完整樣式
*/
public static final int FULL = 0;
/**
* 長樣式
*/
public static final int LONG = 1;
/**
* 中等樣式
*/
public static final int MEDIUM = 2;
/**
* 短樣式
*/
public static final int SHORT = 3;
/**
* 默認(rèn)樣式:中等樣式
*/
public static final int DEFAULT = MEDIUM;| 樣式 | 輸出格式(日期Date) | 輸出格式(時間Time) |
|---|---|---|
| SHORT | 22-8-30 | 下午4:03 |
| MEDIUM DEFAULT | 2022-8-30 | 16:03:06 |
| LONG | 2022年8月30日 | 下午04時03分06秒 |
| FULL | 2022年8月30日 星期二 | 下午04時03分06秒 CST |
Locale
設(shè)置語言環(huán)境。

- language:語言(zh:中文)
- region:地區(qū)(CN:China)
2. SimpleDateFormat
SimpleDateFormat是DateFormat的一個具體實現(xiàn)類,是非線程安全的。
因為DateFormat直接支持的樣式比較少,經(jīng)常滿足不了實際需求,于是SimpleDateFormat就來了,SimpleDateFormat提供了豐富的樣式且可自定義樣式。
在使用SimpleDateFormat的時候,需要通過字母來描述時間元素,并組裝成想要的日期和時間模式。
常用模式元素
常用的日期時間元素和字母的對應(yīng)表如下:
| 字母 | 描述 | 實例 |
|---|---|---|
| G | 年代標(biāo)志符(公元、公元前) | AD、BC |
| y | 年 | 2015 |
| Y | 周年 | 2016 |
| M | 年中的月份 | 12 |
| w | 年中的周數(shù) | 50 |
| W | 月份中的周數(shù) | 02 |
| D | 年中的天數(shù) | 344 |
| d | 月份中的天數(shù) | 10 |
| F | 月份中的星期 | 02 |
| E | 周中的天數(shù)(星期幾) | Thu |
| u | 周中的天數(shù)(第幾天,星期一=1,星期日=7) | 1 |
| a | AM/PM標(biāo)記 | AM、PM、上午、下午 |
| H | 一天中的小時數(shù)(0~23) | 21 |
| k | 一天中的小時數(shù)(1~24) | 21 |
| K | AM/PM中的小時數(shù)(0~11) | 09 |
| h | AM/PM中的小時數(shù)(1~12) | 09 |
| m | 小時中的分鐘數(shù) | 31 |
| s | 分鐘中的秒數(shù) | 08 |
| S | 毫秒數(shù) | 716 |
| z | 時區(qū) | CST |
| Z | 時區(qū)(RFC 822標(biāo)準(zhǔn)時區(qū)) | +0800 |
| X | 時區(qū)(ISO 8601標(biāo)準(zhǔn)時區(qū)) | +08 |
y與Y的區(qū)別:
- YY是周年
- yy是日歷年,推薦使用y
舉例:今天是2019年12月30日,日歷年是 2019,但周年是 2020,因為本周是 2020 年的第 1 周。所以yy是19,而YY是20。
使用方法
格式化
public static void main(String[] args) throws ParseException {
Date date = new Date();
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("G yyyy-MM-dd HH:mm:ss S E z");
String format = simpleDateFormat.format(date);
}debug:

解析
public static void main(String[] args) throws ParseException {
String str = "公元 2022-08-30 22:10:03 530 星期二 CST";
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("G yyyy-MM-dd HH:mm:ss S E z");
Date date1 = (Date) simpleDateFormat.parseObject(str);
}debug:

3. ClassicFormat
暫不分析。
數(shù)字格式化
1. NumberFormat
數(shù)字格式化抽象類,根據(jù)當(dāng)前語言環(huán)境格式化數(shù)字。
NumberFormat是一個抽象類,不能直接new創(chuàng)建實例對象。NumberFormat提供了一些靜態(tài)方法便于我們構(gòu)建NumberFormat子類的實例。
常用方法
getInstance
獲取格式化的常規(guī)數(shù)值
- getInstance()
- getInstance(Locale inLocale)
getNumberInstance
獲取格式化的常規(guī)數(shù)值
- getNumberInstance()
- getNumberInstance(Locale inLocale)
getIntegerInstance
獲取格式化的整型數(shù)值
- getIntegerInstance()
- getIntegerInstance(Locale inLocale)
getPercentInstance
獲取格式化的百分比數(shù)值
- getPercentInstance()
- getPercentInstance(Locale inLocale)
getCurrencyInstance
獲取格式化的指定語言環(huán)境的貨幣數(shù)值
- getCurrencyInstance()
- getCurrencyInstance(Locale inLocale)
方法示例
public static void main(String[] args) throws ParseException {
NumberFormat instance = NumberFormat.getInstance();
String format = instance.format(2.3);
System.out.println("getInstance=====================" + format);
NumberFormat integerInstance = NumberFormat.getIntegerInstance();
String format1 = integerInstance.format(2.3);
System.out.println("getIntegerInstance==============" + format1);
NumberFormat percentInstance = NumberFormat.getPercentInstance();
String format2 = percentInstance.format(2.3);
System.out.println("getPercentInstance==============" + format2);
NumberFormat currencyInstance = NumberFormat.getCurrencyInstance();
String format3 = currencyInstance.format(2.3);
System.out.println("getCurrencyInstance=============" + format3);
NumberFormat currencyInstance1 = NumberFormat.getCurrencyInstance(Locale.US);
String format4 = currencyInstance1.format(2.3);
System.out.println("getCurrencyInstance(Locale.US)==" + format4);
}控制臺日志:
getInstance=====================2.3
getIntegerInstance==============2
getPercentInstance==============230%
getCurrencyInstance=============¥2.30
getCurrencyInstance(Locale.US)==$2.30
2. DecimalFormat
DecimalFormat是NumberFormat的一個具體子類,用于格式化十進制數(shù)字。
DecimalFormat能夠分析和格式化任意語言環(huán)境中的數(shù)字:
- 包括對西方語言、阿拉伯語和印度語數(shù)字的支持。
- 支持整數(shù) (123)、定點數(shù) (123.4)、科學(xué)記數(shù)法表示的數(shù) (1.23E4)、百分?jǐn)?shù) (12%) 和金額 ($123)等。
- 所有的內(nèi)容都可以本地化(本地化:使用本地的語言環(huán)境)。
需要注意的是:DecimalFormat是非線程安全的。
DecimalFormat支持手動配置模式和使用模式符號。
手動設(shè)置模式
- setMaximumFractionDigits(int newValue):設(shè)置小數(shù)部分中允許的最大數(shù)字位數(shù)
- setMinimumFractionDigits(int newValue):設(shè)置小數(shù)部分中允許的最小數(shù)字位數(shù),如果原數(shù)小數(shù)位數(shù)不夠的話,會補零。
- setGroupingSize(int i):設(shè)置分組中一組的位數(shù)(整數(shù)部分,默認(rèn)3個數(shù)字為一組)。
- setGroupingUsed(boolean value):設(shè)置是否使用分組,true表示使用,false表示取消分組
- setMaximumIntegerDigits(int newValue):設(shè)置整數(shù)部分允許的最大數(shù)字位數(shù)
- setMinimumIntegerDigits(int newValue):設(shè)置整數(shù)部分允許的最小數(shù)字位數(shù)
使用模式符號串
| 符號 | 位置 | 是否本地化 | 含義 |
|---|---|---|---|
| 0 | 數(shù)字 | 是 | 阿拉伯?dāng)?shù)字,位數(shù)不足時補0 |
| # | 數(shù)字 | 是 | 阿拉伯?dāng)?shù)字,位數(shù)不足時不管 |
| . | 數(shù)字 | 是 | 小數(shù)分隔符或貨幣小數(shù)分隔符 |
| - | 數(shù)字 | 是 | 減號 |
| , | 數(shù)字 | 是 | 分組分隔符 |
| E | 數(shù)字 | 是 | 分隔科學(xué)計數(shù)法中的尾數(shù)和指數(shù) |
| ; | 子模式邊界 | 是 | 分隔正數(shù)和負(fù)數(shù)子模式 分號前是正常模式,分號后是負(fù)數(shù)輸入的的輸出前綴 - 如果輸入為正數(shù),輸出:正常模式的結(jié)果 - 如果輸入為正數(shù),輸出:負(fù)數(shù)的前綴+正常模式的結(jié)果的絕對值 |
| % | 前綴或后綴 | 是 | 乘以100并顯示為百分?jǐn)?shù) |
| \u2030 | 前綴或后綴 | 是 | 乘以1000并顯示為千分?jǐn)?shù) |
| ¤(\u00A4) | 前綴或后綴 | 否 | 貨幣記號,由貨幣符號替換。 如果同時出現(xiàn)兩個該符號,則用國際貨幣符號替換。 如果出現(xiàn)在某個模式中,則使用貨幣小數(shù)分隔符,而不使用小數(shù)分隔符。 |
| ' | 前綴或后綴 | 否 | 用于在前綴或后綴中為特殊字符加引號,使特殊符號變?yōu)槠胀ㄗ址ㄈ缫獎?chuàng)建單引號本身,請連續(xù)使用兩個單引號)。 例如:"'#'#" 將123格式化為 "#123" |
使用方法
格式化
① 手動配置模式
public static void main(String[] args) throws ParseException {
DecimalFormat decimalFormat = new DecimalFormat();
decimalFormat.setGroupingUsed(true);// 使用分組
decimalFormat.setGroupingSize(4);// 分組中一組的位數(shù)
decimalFormat.setMinimumIntegerDigits(2);// 整數(shù)部分最小位數(shù)
decimalFormat.setMaximumIntegerDigits(8);// 整數(shù)部分最大位數(shù)
decimalFormat.setMinimumFractionDigits(2);// 小數(shù)部分最小位數(shù)
decimalFormat.setMaximumFractionDigits(4);// 小數(shù)部分最大位數(shù)
System.out.println(decimalFormat.format(1.11));// 01.11
System.out.println(decimalFormat.format(11111.222));// 1,1111.222
System.out.println(decimalFormat.format(11111111111.222222222222));// 1111,1111.2222
}② 使用模式符號串
public static void main(String[] args){
double pi = 3.1415926;
// 取整數(shù)部分,整數(shù)部分不足2位補0
System.out.println(new DecimalFormat("00").format(pi));// 03
// 取整數(shù)部分和10位小數(shù),整數(shù)部分不足2位補0,小數(shù)部分不足10位補0
System.out.println(new DecimalFormat("00.0000000000").format(pi));// 03.1415926000
// 取整數(shù)部分,整數(shù)部分不足2位不管
System.out.println(new DecimalFormat("##").format(pi));// 3
// ###和上面的##沒區(qū)別
System.out.println(new DecimalFormat("###").format(pi));// 3
// 取整數(shù)部分和10位小數(shù),整數(shù)部分不足2位不管,小數(shù)部分不足10位不管
System.out.println(new DecimalFormat("##.##########").format(pi));// 3.1415926
// 若輸入為非負(fù)數(shù),按;前面的正常模式輸出
// 若輸入為負(fù)數(shù),按;后面的(負(fù)數(shù)輸入的輸出前綴+正常模式輸出的絕對值)輸出
System.out.println(new DecimalFormat("#.##;前綴").format(3.1415926));// 3.14
System.out.println(new DecimalFormat("#.##;前綴").format(-3.1415926));// 前綴3.14
// 百分比方式計數(shù)(百分號在末位),取整數(shù)部分和2位小數(shù),小數(shù)部分不足2位不管
System.out.println(new DecimalFormat("#.##%").format(pi));// 314.16%
// 百分比方式計數(shù)(百分號在首位),取整數(shù)部分和2位小數(shù),小數(shù)部分不足2位不管
System.out.println(new DecimalFormat("%#.##").format(pi));// %314.16
// 千分比方式計數(shù)(千分號在末位),取整數(shù)部分和2位小數(shù),小數(shù)部分不足2位不管
System.out.println(new DecimalFormat("#.##\u2030").format(pi));// 3141.59‰
// 千分比方式計數(shù)(千分號在首位),取整數(shù)部分和2位小數(shù),小數(shù)部分不足2位不管
System.out.println(new DecimalFormat("\u2030#.##").format(pi));// ‰3141.59
//顯示為科學(xué)計數(shù)法,并取五位小數(shù)
System.out.println(new DecimalFormat("#.#####E0").format(pi));// 3.14159E0
//顯示為兩位整數(shù)的科學(xué)計數(shù)法,并取四位小數(shù)
System.out.println(new DecimalFormat("00.####E0").format(pi));// 31.4159E-1
//取整數(shù)部分,每三位以逗號進行分隔。
System.out.println(new DecimalFormat(",###").format(pi));// 3
// 添加貨幣符號在首位,如果同時出現(xiàn)兩個該符號,則用國際貨幣符號
System.out.println(new DecimalFormat("¤#.##").format(pi));// ¥3.14
System.out.println(new DecimalFormat("\u00A4#.##").format(pi));// ¥3.14
System.out.println(new DecimalFormat("¤¤#.##").format(pi));// CNY3.14
// 添加貨幣符號在末位,如果同時出現(xiàn)兩個該符號,則用國際貨幣符號
System.out.println(new DecimalFormat("#.##¤").format(pi));// 3.14¥
System.out.println(new DecimalFormat("#.##\u00A4").format(pi));// 3.14¥
System.out.println(new DecimalFormat("#.##¤¤").format(pi));// 3.14CNY
// 將特殊字符變?yōu)槠胀ㄗ址?
System.out.println(new DecimalFormat("''#.##").format(pi));// '3.14
System.out.println(new DecimalFormat("#.##''").format(pi));// 3.14'
System.out.println(new DecimalFormat("'#'#.##").format(pi));// #3.14
System.out.println(new DecimalFormat("#.##'#'").format(pi));// 3.14#
//將格式嵌入文本
System.out.println(new DecimalFormat("圓周率π:#.##").format(pi));// 圓周率π:3.14
}解析
解析也可以手動配置模式或者使用模式符號串,這里只以使用模式符號串方式舉例。
public static void main(String[] args) throws ParseException {
System.out.println(new DecimalFormat("圓周率π:#.##").parseObject("圓周率π:3.14"));// 3.14
System.out.println(new DecimalFormat("#.##;前綴").parseObject("前綴3.14"));// -3.14
System.out.println(new DecimalFormat("00.####E0").parseObject("31.4159E-1"));// 3.14159
}3. ChoiceFormat
ChoiceFormat將格式化運用到某個范圍的數(shù)。
ChoiceFormat與其他Format類的不同之處在于,它使用構(gòu)造函數(shù)放入方式(而不是使用getInstance樣式工廠方法)創(chuàng)建ChoiceFormat對象。
注意:limits數(shù)組需要升序排列(否則結(jié)果會出錯)
常用方法
nextDouble(double d)
查找大于d的最小double值,一般用在limits數(shù)組中,從而使limits數(shù)組形成一個右開區(qū)間數(shù)組
例如:limits = {0,1,ChoiceFormat.nextDouble(1)}
nextDouble(double d, boolean positive)
- positive=true,表示查找大于d的最小double值,一般用在limits數(shù)組中,從而使limits數(shù)組形成一個右開區(qū)間數(shù)組
- positive=false,表示查找小于d的最大double值,一般用在limits數(shù)組中,從而使limits數(shù)組形成一個左開區(qū)間數(shù)組
previousDouble(double d)
查找小于d的最大double值,一般用在limits數(shù)組中,從而使limits數(shù)組形成一個左開區(qū)間數(shù)組
public static void main(String[] args) {
System.out.println(ChoiceFormat.nextDouble(1));// 1.0000000000000002
System.out.println(ChoiceFormat.nextDouble(1,true));// 1.0000000000000002
System.out.println(ChoiceFormat.nextDouble(1,false));// 0.9999999999999999
System.out.println(ChoiceFormat.previousDouble(1));// 0.9999999999999999
}上面三個方法的使用場景:
如果有個這樣的需求:
- 當(dāng)number < 1時,取值0
- 當(dāng)1 <= number <= 2時,取值1
- 當(dāng)2 < number <= 3時,取值2
- 當(dāng)number > 3時,取值3
代碼實現(xiàn):
double[] limits = {0, 1, 2, 3};
String[] formats = {"0","1","2","3"};
ChoiceFormat format = new ChoiceFormat(limits, formats);如果這樣的寫法,顯然不能滿足:
- number = 2時,取值1
- number = 3時,取值2
我們可以這么寫
public static void main(String[] args) {
double[] limits = {0, 1, ChoiceFormat.nextDouble(2), ChoiceFormat.nextDouble(3)};
String[] formats = {"0","1","2","3"};
ChoiceFormat format = new ChoiceFormat(limits, formats);
System.out.println(format.format(0));
System.out.println(format.format(1));
System.out.println(format.format(2));
System.out.println(format.format(3));
System.out.println(format.format(4));
}
能完全滿足上面的需求(number = 2時,取值1;number = 3時,取值2)。
ChoiceFormat(double[] limits, String[] formats)
構(gòu)造函數(shù)中接收一個formats數(shù)組和一個limits數(shù)組,這兩個數(shù)組必須具有相同數(shù)量的元素。
- 第一個數(shù)組是原始雙精度數(shù)組,表示每個間隔的最小值(起始值)。
- 第二個數(shù)組是一個字符串?dāng)?shù)組,代表與每個間隔關(guān)聯(lián)的名稱。
limits數(shù)組實際上是個區(qū)間,可開可閉,并且必須按升序排列,如果不按升序排列,格式化結(jié)果將會不正確,還可以使用\u221E(表示無窮大)。
匹配規(guī)則:limits[i] <= number <limits[i+1]
number表示使用format方法傳入的值,i表示limit數(shù)組中的索引。當(dāng)且僅當(dāng)上述公式成立時,number匹配i,如果不能匹配,則會根據(jù)number是太小還是太大,匹配limits數(shù)組的第一個索引或最后一個索引,然后使用匹配的limits數(shù)組中的索引,去formats數(shù)組中尋找相同索引的值。
public static void main(String[] args) {
double[] limits = {0, 1, 2, 3, 4, 5, 6};
String[] formats = { "星期一", "星期二", "星期三", "星期四", "星期五", "星期六", "星期日" };
ChoiceFormat format = new ChoiceFormat(limits, formats);
System.out.println(format.format(-1));// 星期一
System.out.println(format.format(0));// 星期一
System.out.println(format.format(1));// 星期二
System.out.println(format.format(2.5));// 星期三
System.out.println(format.format(6.6));// 星期日
System.out.println(format.format(7));// 星期日
System.out.println(format.format(8));// 星期日
}| namber取值范圍 | 匹配formats索引位置 | 匹配值 |
|---|---|---|
| number < 0 | 匹配formats[0] | 星期一 |
| 0 <= number < 1 | 匹配formats[0] | 星期一 |
| 1 <= number < 2 | 匹配formats[1] | 星期二 |
| 2 <= number < 3 | 匹配formats[2] | 星期三 |
| 3 <= number < 4 | 匹配formats[3] | 星期四 |
| 4 <= number < 5 | 匹配formats[4] | 星期五 |
| 5 <= number < 6 | 匹配formats[5] | 星期六 |
| numbe >= 6 | 匹配formats[6] | 星期日 |
ChoiceFormat(String newPattern)
ChoiceFormat類的構(gòu)造方法也允許我們傳入一個模式字符串,format方法會根據(jù)這個模式字符串執(zhí)行格式化操作。
模式元素的格式:doubleNum [占位符] formatStr
占位符
| 占位符 | 描述 |
|---|---|
| # | 等于 |
| < | 大于 |
| \u2264(<=) | 大于等于 |
注意:比較運算符和平時實現(xiàn)相反的,因為該地方類似于變量在比較運算符的右邊(平時是在左邊)
模式字符串中的每個模式元素之間使用 | 分割,| 前后可以添加空格以美化代碼。
其實在ChoiceFormat(String newPattern)構(gòu)造方法的內(nèi)部,模式字符串還是被轉(zhuǎn)換為limits和formats兩個數(shù)組。
public static void main(String[] args) {
ChoiceFormat choice=new ChoiceFormat("1 # A | 2 < B | 3 \u2264 C | 5 # D");
System.out.println(choice.format(0));
System.out.println(choice.format(1));
System.out.println(choice.format(2));
System.out.println(choice.format(3));
System.out.println(choice.format(4));
System.out.println(choice.format(5));
System.out.println(choice.format(6));
}
字符串格式化
1. MessageFormat
MessageFormat提供與語言環(huán)境無關(guān)的生成連接消息的方式。
通常用MessageFormat的靜態(tài)方法format,該方法接收一個字符串的模式和一組對象(對象數(shù)組),按照模式形式將格式化的對象插入到模式中,然后返回字符串結(jié)果。
static String format(String pattern, Object … arguments)
- pattern:字符串模式
- arguments:對象數(shù)組
模式元素
模式元素格式:ArgumentIndex[,FormatType[,FormatStyle]]
- ArgumentIndex:入?yún)⑺饕恢茫◤?開始)
- FormatType:格式化類型
- FormatStyle:格式化樣式
格式化類型
- date:調(diào)用DateFormat進行格式化
- time:調(diào)用DateFormat進行格式化
- number:調(diào)用NumberFormat進行格式化
- choice:調(diào)用ChoiceFormat進行格式化
格式化樣式
- short
- medium
- long
- full
- integer
- currency
- percent
- SubformatPattern(子模式)
使用示例
public static void main(String[] args) {
Date date = new Date();
System.out.println(MessageFormat.format("{0},{1},{2}", date, date, 1.11));
System.out.println(MessageFormat.format("{0,date},{1,time},{2,number}", date, date, 1.11));
System.out.println(MessageFormat.format("{0,date,MEDIUM},{1,time,MEDIUM},{2,number,integer},{3,number,#.#}", date, date, 1.11, 2.22));
}輸出:
22-9-5 下午10:47,22-9-5 下午10:47,1.11
2022-9-5,22:47:39,1.11
2022-9-5,22:47:39,1,2.2
2. String.format
String有兩個格式化方法
- format(String format, Object… args)
- format(Locale l, String format, Object… args)
format參數(shù)
format參數(shù)格式:%[index$][flags][width][.precision]conversion
模塊
| 模塊 | 是否必須 | 描述 |
|---|---|---|
| index$ | 否 | 參數(shù)在參數(shù)列表中的位置,十進制整數(shù)。 第一個參數(shù)由 "1$" 引用,第二個參數(shù)由 "2$"引用 |
| flags | 否 | 標(biāo)識,用來控制輸出格式 |
| width | 否 | 輸出的最小長度,正整數(shù) |
| .precision | 否 | 精度,限定輸出字符數(shù) |
| conversion | 是 | 轉(zhuǎn)換符,指定如何格式化參數(shù) |
標(biāo)識
| 標(biāo)識 | 描述 |
|---|---|
| - | 在最小寬度內(nèi)左對齊,不可與0標(biāo)識一起使用 |
| 0 | 若內(nèi)容長度不足最小寬度,則在左邊用0來填充 |
| # | 對8進制和16進制,8進制前添加一個0,16進制前添加0x |
| + | 結(jié)果總包含一個+或-號 |
| 空格 | 正數(shù)前加空格,負(fù)數(shù)前加-號 |
| , | 只用與十進制,每3位數(shù)字間用,分隔 |
| ( | 若結(jié)果為負(fù)數(shù),則用括號括住,且不顯示符號 |
轉(zhuǎn)換符
| s | 字符串類型 |
| c | 字符類型 |
| b | 布爾類型,只要實參為非false的布爾類型,均格式化為字符串true,否則為字符串false |
| d | 整數(shù)類型(十進制) |
| x | 整數(shù)類型(八進制) |
| o | 整數(shù)類型(十六進制) |
| f | 浮點數(shù)型(十進制)。顯示9位有效數(shù)字,且會進行四舍五入。如99.99 |
| a | 浮點數(shù)型(十六進制) |
| g | 浮點數(shù)型(比%f,%a長度短些,顯示6位有效數(shù)字,且會進行四舍五入) |
| e | 指數(shù)類型。如9.38e+5 |
| h | 散列碼 |
| % | 百分比 |
| tx | 日期與時間類型(x代表不同的日期與時間轉(zhuǎn)換符) |
| n | 換行符 |
舉例:
public static void main(String[] args) {
System.out.println(String.format("%2$06.2f======%1$d", 2, 11.1111));// 011.11======2
}總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
三分鐘帶你掌握J(rèn)ava開發(fā)圖片驗證碼功能方法
這篇文章主要來為大家詳細(xì)介紹Java實現(xiàn)開發(fā)圖片驗證碼的具體方法,文中的示例代碼講解詳細(xì),具有一定的借鑒價值,需要的可以參考一下2023-02-02
SpringBoot使用hutool操作FTP的詳細(xì)過程
在使用SpringBoot結(jié)合hutool操作FTP時,遇到防火墻導(dǎo)致上傳文件大小為0kb的問題,通過設(shè)置FTP為被動模式解決,本文詳細(xì)解析了FTP的主動模式和被動模式的工作原理、安全性及適用場景,幫助理解FTP的連接方式和解決網(wǎng)絡(luò)限制問題2024-09-09
Java用POI解析excel并獲取所有單元格數(shù)據(jù)的實例
下面小編就為大家?guī)硪黄狫ava用POI解析excel并獲取所有單元格數(shù)據(jù)的實例。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-10-10
SpringBoot種如何使用?EasyExcel?實現(xiàn)自定義表頭導(dǎo)出并實現(xiàn)數(shù)據(jù)格式化轉(zhuǎn)換
本文詳細(xì)介紹了如何使用EasyExcel工具類實現(xiàn)自定義表頭導(dǎo)出,并實現(xiàn)數(shù)據(jù)格式化轉(zhuǎn)換與添加下拉框操作,通過示例和代碼,展示了如何處理不同數(shù)據(jù)結(jié)構(gòu)和注解,確保數(shù)據(jù)在導(dǎo)出時能夠正確顯示和格式化,此外,還介紹了如何解決特定數(shù)據(jù)類型的轉(zhuǎn)換問題,并提供了解決方案2024-11-11
Spring Boot統(tǒng)一異常攔截實踐指南(最新推薦)
本文介紹了Spring Boot中統(tǒng)一異常處理的重要性及實現(xiàn)方案,包括使用`@ControllerAdvice`和`@ExceptionHandler`注解,實現(xiàn)全局異常處理和統(tǒng)一響應(yīng)格式,本文給大家介紹的非常詳細(xì),感興趣的朋友一起看看吧2025-02-02

