Java字符串格式化功能?String.format用法詳解
一、前言
String.format 作為文本處理工具,為我們提供強(qiáng)大而豐富的字符串格式化功能,為了不止步于簡單調(diào)用 String.format("Hello %s", "John");
,下面將筆記整理并記錄下來。
二、重載方法
// 使用當(dāng)前本地區(qū)域?qū)ο螅↙ocale.getDefault())格式化字符串 String String.format(String fmt, Object... args); // 自定義本地區(qū)域?qū)ο蟾袷交址? String String.format(Locale locale, String fmt, Object... args);
三、占位符
占位符完整格式為: %[index$][標(biāo)識(shí)]*[最小寬度][.精度]轉(zhuǎn)換符
。
針對不同數(shù)據(jù)類型的格式化,占位符的格式將有所裁剪。
%
,占位符的其實(shí)字符,若要在占位符內(nèi)部使用%,則需要寫成 %%
。
[index$]
,位置索引從1開始計(jì)算,用于指定對索引相應(yīng)的實(shí)參進(jìn)行格式化并替換掉該占位符。
[標(biāo)識(shí)]
,用于增強(qiáng)格式化能力,可同時(shí)使用多個(gè) [標(biāo)識(shí)]
,但某些標(biāo)識(shí)是不能同時(shí)使用的。
[最小寬度]
,用于設(shè)置格式化后的字符串最小長度,若使用 [最小寬度]
而無設(shè)置 [標(biāo)識(shí)]
,那么當(dāng)字符串長度小于最小寬度時(shí),則以左邊補(bǔ)空格的方式湊夠最小寬度。
[.精度]
,對于浮點(diǎn)數(shù)類型格式化使用,設(shè)置保留小數(shù)點(diǎn)后多少位。
轉(zhuǎn)換符
,用于指定格式化的樣式,和限制對應(yīng)入?yún)⒌臄?shù)據(jù)類型。
四、對字符、字符串進(jìn)行格式化
占位符格式為: %[index$][標(biāo)識(shí)][最小寬度]轉(zhuǎn)換符
示例——將"hello"格式化為" hello"
String raw = "hello"; String str = String.format("%1$7s", raw); // 簡化 //String str = String.format("%7s", raw);
示例——將"hello"格式化為"hello "
String raw = "hello"; String str = String.format("%1$-7s", raw); // 簡化 //String str = String.format("%-7s", raw);
可用標(biāo)識(shí):
-,在最小寬度內(nèi)左對齊,右邊用空格補(bǔ)上。
可用轉(zhuǎn)換符:
s,字符串類型。
c,字符類型,實(shí)參必須為char或int、short等可轉(zhuǎn)換為char類型的數(shù)據(jù)類型,否則拋IllegalFormatConversionException異常。
b,布爾類型,只要實(shí)參為非false的布爾類型,均格式化為字符串true,否則為字符串false。
n,平臺(tái)獨(dú)立的換行符(與通過 System.getProperty("line.separator") 是一樣的)
五、對整數(shù)進(jìn)行格式化
常規(guī)類型的格式化
String類的format()方法用于創(chuàng)建格式化的字符串以及連接多個(gè)字符串對象。熟悉C語言的同學(xué)應(yīng)該記得C語言的sprintf()方法,兩者有類似之處。format()方法有兩種重載形式。
format(String format, Object... args) 新字符串使用本地語言環(huán)境,制定字符串格式和參數(shù)生成格式化的新字符串。
format(Locale locale, String format, Object... args) 使用指定的語言環(huán)境,制定字符串格式和參數(shù)生成格式化的字符串。
顯示不同轉(zhuǎn)換符實(shí)現(xiàn)不同數(shù)據(jù)類型到字符串的轉(zhuǎn)換。
轉(zhuǎn) 換 符 | 說 明 | 示 例 |
%s | 字符串類型 | "mingrisoft" |
%c | 字符類型 | 'm' |
%b | 布爾類型 | true |
%d | 整數(shù)類型(十進(jìn)制) | 99 |
%x | 整數(shù)類型(十六進(jìn)制) | FF |
%o | 整數(shù)類型(八進(jìn)制) | 77 |
%f | 浮點(diǎn)類型 | 99.99 |
%a | 十六進(jìn)制浮點(diǎn)類型 | FF.35AE |
%e | 指數(shù)類型 | 9.38e+5 |
%g | 通用浮點(diǎn)類型(f和e類型中較短的) | |
%h | 散列碼 | |
%% | 百分比類型 | % |
%n | 換行符 | |
%tx | 日期與時(shí)間類型(x代表不同的日期與時(shí)間轉(zhuǎn)換符 |
測試用例
public static void main(String[] args) { String str=null; str=String.format("Hi,%s", "王力"); System.out.println(str); str=String.format("Hi,%s:%s.%s", "王南","王力","王張"); System.out.println(str); System.out.printf("字母a的大寫是:%c %n", 'A'); System.out.printf("3>7的結(jié)果是:%b %n", 3>7); System.out.printf("100的一半是:%d %n", 100/2); System.out.printf("100的16進(jìn)制數(shù)是:%x %n", 100); System.out.printf("100的8進(jìn)制數(shù)是:%o %n", 100); System.out.printf("50元的書打8.5折扣是:%f 元%n", 50*0.85); System.out.printf("上面價(jià)格的16進(jìn)制數(shù)是:%a %n", 50*0.85); System.out.printf("上面價(jià)格的指數(shù)表示:%e %n", 50*0.85); System.out.printf("上面價(jià)格的指數(shù)和浮點(diǎn)數(shù)結(jié)果的長度較短的是:%g %n", 50*0.85); System.out.printf("上面的折扣是%d%% %n", 85); System.out.printf("字母A的散列碼是:%h %n", 'A'); }
輸出結(jié)果
Hi,王力 Hi,王南:王力.王張 字母a的大寫是:A 3>7的結(jié)果是:false 100的一半是:50 100的16進(jìn)制數(shù)是:64 100的8進(jìn)制數(shù)是:144 50元的書打8.5折扣是:42.500000 元 上面價(jià)格的16進(jìn)制數(shù)是:0x1.54p5 上面價(jià)格的指數(shù)表示:4.250000e+01 上面價(jià)格的指數(shù)和浮點(diǎn)數(shù)結(jié)果的長度較短的是:42.5000 上面的折扣是85% 字母A的散列碼是:41
占位符格式為: %[index$][標(biāo)識(shí)]*[最小寬度]轉(zhuǎn)換符
示例——將1顯示為0001
int num = 1; String str = String.format("%04d", num)
示例——將-1000顯示為(1,000)
int num = -1000; String str = String.format("%(,d", num)
可用標(biāo)識(shí):
-,在最小寬度內(nèi)左對齊,不可以與0標(biāo)識(shí)一起使用。 0,若內(nèi)容長度不足最小寬度,則在左邊用0來填充。 #,對8進(jìn)制和16進(jìn)制,8進(jìn)制前添加一個(gè)0,16進(jìn)制前添加0x。 +,結(jié)果總包含一個(gè)+或-號(hào)。 空格,正數(shù)前加空格,負(fù)數(shù)前加-號(hào)。 ,,只用與十進(jìn)制,每3位數(shù)字間用,分隔。 (,若結(jié)果為負(fù)數(shù),則用括號(hào)括住,且不顯示符號(hào)。
可用轉(zhuǎn)換符:
b,布爾類型,只要實(shí)參為非false的布爾類型,均格式化為字符串true,否則為字符串false。 d,整數(shù)類型(十進(jìn)制)。 x,整數(shù)類型(十六進(jìn)制)。 o,整數(shù)類型(八進(jìn)制) n,平臺(tái)獨(dú)立的換行符, 也可通過System.getProperty("line.separator")獲取
六、對浮點(diǎn)數(shù)進(jìn)行格式化
占位符格式為: %[index$][標(biāo)識(shí)]*[最小寬度][.精度]轉(zhuǎn)換符
示例:
double num = 123.4567899; System.out.print(String.format("%f %n", num)); // 123.456790 System.out.print(String.format("%a %n", num)); // 0x1.edd3c0bb46929p6 System.out.print(String.format("%g %n", num)); // 123.457
可用標(biāo)識(shí):
-,在最小寬度內(nèi)左對齊,不可以與0標(biāo)識(shí)一起使用。 0,若內(nèi)容長度不足最小寬度,則在左邊用0來填充。 #,對8進(jìn)制和16進(jìn)制,8進(jìn)制前添加一個(gè)0,16進(jìn)制前添加0x。 +,結(jié)果總包含一個(gè)+或-號(hào)。 空格,正數(shù)前加空格,負(fù)數(shù)前加-號(hào)。 ,,只用與十進(jìn)制,每3位數(shù)字間用,分隔。 (,若結(jié)果為負(fù)數(shù),則用括號(hào)括住,且不顯示符號(hào)。
可用轉(zhuǎn)換符:
b,布爾類型,只要實(shí)參為非false的布爾類型,均格式化為字符串true,否則為字符串false。 n,平臺(tái)獨(dú)立的換行符, 也可通過System.getProperty("line.separator")獲取。 f,浮點(diǎn)數(shù)型(十進(jìn)制)。顯示9位有效數(shù)字,且會(huì)進(jìn)行四舍五入。如99.99。 a,浮點(diǎn)數(shù)型(十六進(jìn)制)。 e,指數(shù)類型。如9.38e+5。 g,浮點(diǎn)數(shù)型(比%f,%a長度短些,顯示6位有效數(shù)字,且會(huì)進(jìn)行四舍五入)
七、對日期時(shí)間進(jìn)行格式化
占位符格式為: %[index$]t轉(zhuǎn)換符
示例:
Date now = new Date(); String str = String.format("%tF", now); // 2024-09-06
可用轉(zhuǎn)換符
1. 日期的轉(zhuǎn)換符
c,星期六 十月 27 14:21:20 CST 2024 F,2024-10-27 D,10/27/07 r,02:25:51 下午 T,14:28:16 R,14:28 b, 月份簡稱 B, 月份全稱 a, 星期簡稱 A, 星期全稱 C, 年前兩位(不足兩位補(bǔ)零) y, 年后兩位(不足兩位補(bǔ)零) j, 當(dāng)年的第幾天 m, 月份(不足兩位補(bǔ)零) d, 日期(不足兩位補(bǔ)零) e, 日期(不足兩位不補(bǔ)零)
2. 時(shí)間的轉(zhuǎn)換符
H, 24小時(shí)制的小時(shí)(不足兩位補(bǔ)零) k, 24小時(shí)制的小時(shí)(不足兩位不補(bǔ)零) I, 12小時(shí)制的小時(shí)(不足兩位補(bǔ)零) i, 12小時(shí)制的小時(shí)(不足兩位不補(bǔ)零) M, 分鐘(不足兩位補(bǔ)零) S, 秒(不足兩位補(bǔ)零) L, 毫秒(不足三位補(bǔ)零) N, 毫秒(不足9位補(bǔ)零) p, 小寫字母的上午或下午標(biāo)記,如中文為“下午”,英文為pm z, 相對于GMT的時(shí)區(qū)偏移量,如+0800 Z, 時(shí)區(qū)縮寫,如CST s, 自1970-1-1 00:00:00起經(jīng)過的秒數(shù) Q, 自1970-1-1 00:00:00起經(jīng)過的豪秒
八、其他轉(zhuǎn)換符
<,用于格式化前一個(gè)轉(zhuǎn)換符所描述的參數(shù)。
示例:
int num = 1000; String str = String.format("%d %<,d", num); // 結(jié)果"1000 1,000
九、總結(jié)
暫時(shí)寫到這里吧,以后用到其他的再補(bǔ)充上去!
參考
http://blog.csdn.net/lonely_fireworks/article/details/7962171
http://www.cnblogs.com/xytop/articles/1277125.html
相關(guān)文章
Spring Boot定時(shí)任務(wù)單線程多線程實(shí)現(xiàn)代碼解析
這篇文章主要介紹了Spring Boot定時(shí)任務(wù)單線程多線程實(shí)現(xiàn)代碼解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-08-08Java多線程基礎(chǔ) 線程的等待與喚醒(wait、notify、notifyAll)
這篇文章主要介紹了Java多線程基礎(chǔ) 線程的等待與喚醒,需要的朋友可以參考下2017-05-05SpringBoot統(tǒng)一api返回風(fēng)格的實(shí)現(xiàn)
這篇文章主要介紹了SpringBoot統(tǒng)一api返回風(fēng)格的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-03-03Java讀寫pdf文件的詳細(xì)實(shí)現(xiàn)方法
最近公司的項(xiàng)目中需要操作pdf文件,所以這里給大家總結(jié)下方法,這篇文章主要給大家介紹了關(guān)于Java讀寫pdf文件的詳細(xì)實(shí)現(xiàn)方法,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-09-09resultMap標(biāo)簽中里的collection標(biāo)簽詳解
這篇文章主要介紹了resultMap標(biāo)簽中里的collection標(biāo)簽,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-02-02簡單了解Spring Web相關(guān)模塊運(yùn)行原理
這篇文章主要介紹了簡單了解Spring Web相關(guān)模塊運(yùn)行原理,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-06-06Java內(nèi)部類的實(shí)現(xiàn)原理與可能的內(nèi)存泄漏說明
這篇文章主要介紹了Java內(nèi)部類的實(shí)現(xiàn)原理與可能的內(nèi)存泄漏說明,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-10-10