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ù)值進(jìn)行格式化 |
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的一個具體子類,用于格式化十進(jìn)制數(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ù)不夠的話,會補(bǔ)零。
- 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ù)不足時補(bǔ)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位補(bǔ)0 System.out.println(new DecimalFormat("00").format(pi));// 03 // 取整數(shù)部分和10位小數(shù),整數(shù)部分不足2位補(bǔ)0,小數(shù)部分不足10位補(bǔ)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ù)部分,每三位以逗號進(jìn)行分隔。 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進(jìn)行格式化
- time:調(diào)用DateFormat進(jìn)行格式化
- number:調(diào)用NumberFormat進(jìn)行格式化
- choice:調(diào)用ChoiceFormat進(jìn)行格式化
格式化樣式
- 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ù)列表中的位置,十進(jìn)制整數(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進(jìn)制和16進(jìn)制,8進(jìn)制前添加一個0,16進(jìn)制前添加0x |
+ | 結(jié)果總包含一個+或-號 |
空格 | 正數(shù)前加空格,負(fù)數(shù)前加-號 |
, | 只用與十進(jìn)制,每3位數(shù)字間用,分隔 |
( | 若結(jié)果為負(fù)數(shù),則用括號括住,且不顯示符號 |
轉(zhuǎn)換符
s | 字符串類型 |
c | 字符類型 |
b | 布爾類型,只要實參為非false的布爾類型,均格式化為字符串true,否則為字符串false |
d | 整數(shù)類型(十進(jìn)制) |
x | 整數(shù)類型(八進(jìn)制) |
o | 整數(shù)類型(十六進(jìn)制) |
f | 浮點數(shù)型(十進(jìn)制)。顯示9位有效數(shù)字,且會進(jìn)行四舍五入。如99.99 |
a | 浮點數(shù)型(十六進(jìn)制) |
g | 浮點數(shù)型(比%f,%a長度短些,顯示6位有效數(shù)字,且會進(jìn)行四舍五入) |
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-02SpringBoot使用hutool操作FTP的詳細(xì)過程
在使用SpringBoot結(jié)合hutool操作FTP時,遇到防火墻導(dǎo)致上傳文件大小為0kb的問題,通過設(shè)置FTP為被動模式解決,本文詳細(xì)解析了FTP的主動模式和被動模式的工作原理、安全性及適用場景,幫助理解FTP的連接方式和解決網(wǎng)絡(luò)限制問題2024-09-09Java用POI解析excel并獲取所有單元格數(shù)據(jù)的實例
下面小編就為大家?guī)硪黄狫ava用POI解析excel并獲取所有單元格數(shù)據(jù)的實例。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-10-10SpringBoot種如何使用?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-11Spring Boot統(tǒng)一異常攔截實踐指南(最新推薦)
本文介紹了Spring Boot中統(tǒng)一異常處理的重要性及實現(xiàn)方案,包括使用`@ControllerAdvice`和`@ExceptionHandler`注解,實現(xiàn)全局異常處理和統(tǒng)一響應(yīng)格式,本文給大家介紹的非常詳細(xì),感興趣的朋友一起看看吧2025-02-02