日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

String.format()方法使用说明

發布時間:2025/6/15 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 String.format()方法使用说明 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

2019獨角獸企業重金招聘Python工程師標準>>>

JDK1.5開始String類中提供了一個非常有用的方法String.format(String format, Object ... args)

查看源碼得知其實是調用了Java.util.Formatter.format(String, Object...)方法

public?static?String?format(String?format,?Object?...?args)?{??return?new?Formatter().format(format,?args).toString();?? }??

String.format(String format, Object ... args) 這個方法最重要的的地方就是它的第一個參數String format,我們只要掌握了這個參數的用法也就掌握了String.format的用法

?

首先來看一個列子

String?s2?=?String.format("%1$tY-%1$tm-%1$te",?new?Date());?? System.out.println(s2);??

這里會打印出什么內容?

先不急著去運行它,相信閱讀到后面不用運行,你也會知道的.

查看JDK文檔得知,String.format方法的第一個參數是有個公式可以套的

這里我們只要牢記這個公式就可以,下面說下每個顏色所代表的含義

argument_index: 可選,是一個十進制整數,用于表明參數在參數列表中的位置。第一個參數由 "1$" 引用,第二個參數由 "2$" 引用,依此類推。

flags:?可選,用來控制輸出格式

width:?可選,是一個正整數,表示輸出的最小長度

precision:可選,用來限定輸出字符數

conversion:必須,用來表示如何格式化參數的字符

?

先看一個簡單的列子:

System.out.println(String.format("我的名字叫%s",?"小明"));?//?打印:我的名字叫小明??

這里我們只用了%s這個簡單的表達式,對比上面的公式,我們發現[argument_index$][flags][width][.precision]這些部分全部都省略掉了

只留下一個必須的conversion,在這里conversion就是"s",百分號%是固定不變的

[argument_index$]省略之后它會自動把"小明"這個值填入到%s中去

我再稍微改下列子:

String.format("我叫%s,她叫%s",?"小明","小方");?//?我叫小明,她叫小方??


這里會按順序分別把小明,小方填入到對應的%s中. 如果我們要把小方填在前面,小明填在后面,那該怎么做呢,[argument_index$]就派上用場了

String.format("我叫%2$s,她叫%1$s",?"小明","小方");?//?我叫小方,她叫小明??

依然是百分號%開頭,中間多了個2$,1$

?

conversion可以填s,那還有什么其它字母可以填呢,當然有的比如

o:結果被格式化為八進制整數

x:結果被格式化為十六進制

d:結果被格式化為十進制整數

System.out.println(String.format("%o",?8));?//?10?? System.out.println(String.format("%x",?16));?//?10??


更多的conversion類別可以參考JDK文檔java.util.Formatter類


至此,我們已經了解了argument_index$和conversion的用處,接下來我們了解flagwidth的用法

flag是用來控制輸出格式的,比如左對齊,金額用逗號隔開等

width:表示最小寬度

先看個列子:

String.format("%1$,d",?12302562);?//?12,302,562??

這里多出一個逗號",",它就是flag,用于金額千分位隔開,當然寫成"%,d"也是可以的

再一個列子:

String.format("%1$08d",?123456);//?00123456??

這里0就是flag,表示結果將用零來填充,8就是width,表示最少要8位,d是conversion

至于其它的flag可以查閱JDK文檔

?

接下來說下[.precision]

這個單詞翻譯下是精度的意思,我們發現了前面有個小數點".",因此不難聯想到這個是關于浮點數類型的

只有當傳入的數據是浮點數時這個才有用,整數或者日期類型的數據都不能用

比如我想要四舍五入保留兩位小數,那么我可以這么寫:

String.format("%1$.2f",?12.12555);//?12.13??

這里f表示傳入的數字是浮點型,如果傳入的是整數,或者把f改成d都會拋出異常,JDK文檔中有明確說明

對于浮點轉換?'e'、'E'?和?'f',精度是小數點分隔符后的位數。如果轉換是?'g'?或?'G',那么精度是舍入計算后所得數值的所有位數。如果轉換是?'a'?或?'A',則不必指定精度。

對于字符、整數和日期/時間參數類型轉換,以及百分比和行分隔符轉換,精度是不適用的;如果提供精度,則會拋出異常。

到現在為止這套表達式公式已經基本講完了,這套公式是針對于基本數據類型,和字符串的,如果是正對于時間類型的數據該怎么做呢,比如格式化日期

其實文檔中已經給出說明了:

  • 用來表示日期和時間類型的格式說明符的語法如下 %[argument_index$][flags][width]conversion

    可選的?argument_index、flags?和?width?的定義同上。

    所需的?conversion?是一個由兩字符組成的序列。第一個字符是?'t'?或?'T'。第二個字符表明所使用的格式。這些字符類似于但不完全等同于那些由 GNU?date?和 POSIX?strftime(3c)?定義的字符。

    需要注意的是conversion?是一個由兩字符組成的序列。第一個字符是?'t'?或?'T'。

    也就是說用conversion的時候首先必要寫一個"t",然后在寫其它conversion

    時間類型有它自己的一套conversion,我們簡單的選擇幾個來說:

    'Y'年份,被格式化為必要時帶前導零的四位數(至少),例如,0092?等于格里高利歷的?92?CE。

    ?

    'm'月份,被格式化為必要時帶前導零的兩位數,即?01 - 13。

    ?

    'd'一個月中的天數,被格式化為必要時帶前導零兩位數,即?01 - 31

    ?

    上面三個分別表示年月日

    如果我要顯示年份,我就可以"%tY",顯示月份我就可以寫"%tm",記得一定要帶上"t"

    那么本篇一開始提到的那串復雜的表達式現在看來是不是很簡單呢:

    String?s2?=?String.format("%1$tY-%1$tm-%1$te",?new?Date());?? System.out.println(s2);????

    String.format()方法差不多講完了,仔細看JDK文檔也會慢慢了解的

    需要批量進行格式化時,考慮下DateFormat,?MessageFormat,?NumberFormat?把他們封裝成一個靜態工具類或許更好

    畢竟調用String.format()方法是會new一個Formatter對象,雖然有GC幫忙,但是平時編程的時候還是要考慮這些因素的

    盡量少的創建對象,節省資源

轉載于:https://my.oschina.net/u/2331760/blog/880628

總結

以上是生活随笔為你收集整理的String.format()方法使用说明的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。