解析Java格式字符串的使用
Class Formatter
該類提供了對布局調(diào)整和對齊的支持,對數(shù)字、字符串和日期/時間數(shù)據(jù)的常用格式,以及本地特定的輸出。支持常見的Java類型,如byte、BigDecimal和Calendar。通過Formattable接口為任意的用戶類型提供有限的格式化定制。
格式化器對于多線程訪問不一定安全。線程安全是可選的。
舉例說明:
StringBuilder sb = new StringBuilder(); // Send all output to the Appendable object sb Formatter formatter = new Formatter(sb, Locale.US); // 顯示參數(shù)索引可用于重新排序輸出。 formatter.format("%4$2s %3$2s %2$2s %1$2s", "a", "b", "c", "d") // -> " d c b a" // 可選作為第一個參數(shù)的語言環(huán)境可用于獲取特定于語言環(huán)境的數(shù)字格式??梢越o出精度和寬度,以便對數(shù)值進行舍入與對齊。 formatter.format(Locale.FRANCE, "e = %+10.4f", Math.E); // -> "e = +2,7183" // '(' 數(shù)字標志可用于用小括號而不是減號來格式化負數(shù)。 組別分隔符會自動插入。 formatter.format("Amount gained or lost since last statement: $ %(,.2f", balanceDelta); // -> "Amount gained or lost since last statement: $ (6,217.58)"
如以下調(diào)用所示,存在用于常見格式化請求的便捷方法:
// 寫一個格式化的字符串到 System.out. System.out.format("Local time: %tT", Calendar.getInstance()); // -> "Local time: 13:34:18" // 將格式化的輸出寫到 System.err. System.err.printf("Unable to open file '%1$s': %2$s", fileName, exception.getMessage()); // -> "Unable to open file 'food': No such file or directory"
像 C語言的sprintf(3)
,字符串可以使用靜態(tài)方法格式化String.format
:
// 格式化一個包含日期的字符串 import java.util.Calendar; import java.util.GregorianCalendar; import static java.util.Calendar.*; Calendar c = new GregorianCalendar(1995, MAY, 23); String s = String.format("Duke's Birthday: %1$tb %1$te, %1$tY", c); // -> s == "Duke's Birthday: May 23, 1995"
*每個產(chǎn)生格式化輸出的方法都需要一個格式字符串和一個參數(shù)列表。
格式字符串是一個String
可能包含固定文本和一個或多個嵌入格式說明符的字符串。
https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/Formatter.html#syntax
Calendar c = ...; String s = String.format("Duke's Birthday: %1$tm %1$te,%1$tY", c);
此格式字符串是該format
方法的第一個參數(shù)。它包含三個格式說明符“%1$tm
”、“%1$te
”和“%1$tY
”,它們指示應(yīng)如何處理參數(shù)以及應(yīng)在文本中插入的位置。格式字符串的其余部分是固定文本"Dukes Birthday: "
,包括任何其他空格或標點符號。參數(shù)列表包含在格式字符串之后傳遞給方法的所有參數(shù)。
通用、字符和數(shù)字類型的格式說明符具有以下語法:
%[argument_index$][flags][width][.precision]conversion
可選的argument_index是一個十進制的整數(shù),表示參數(shù)在參數(shù)列表中的位置。第一個參數(shù)用 "1$"引用,第二個用 "2$"引用,等等。
可選的flags是一組用于修改輸出格式的字符。有效標志的集合取決于轉(zhuǎn)換的情況。
可選的width是一個正的十進制整數(shù),表示要寫入輸出的最小字符數(shù)。
可選的precision是一個非負的十進制整數(shù),通常用于限制字符的數(shù)量。具體行為取決于轉(zhuǎn)換的情況。
所需的conversion是一個字符,表示參數(shù)應(yīng)該如何被格式化。一個給定參數(shù)的有效轉(zhuǎn)換集取決于該參數(shù)的數(shù)據(jù)類型。
- 用于表示日期和時間的類型的格式說明符具有以下語法:
%[argument_index$][flags][width]conversion
可選的argument_index、flags和width定義如上。
所需的conversion是兩個字符序列。第一個字符是't'
或'T'
。第二個字符表示要使用的格式。這些字符與 GNUdate
和 POSIXstrftime(3c)
定義的字符相似但不完全相同。
與參數(shù)不對應(yīng)的格式說明符具有以下語法:
- %[flags][width]conversion
可選flags和width定義如上。
所需的conversion是指示要在輸出中插入的內(nèi)容的字符。
conversion
conversion分為以下幾類:
- 一般- 可應(yīng)用于任何參數(shù)類型
- 字符- 可應(yīng)用于表示 Unicode 字符的基本類型:
char
、Character
、byte
、Byte
、short
和Short
. 這種轉(zhuǎn)換也可以應(yīng)用于類型int
和Integer當Character.isValidCodePoint(int)
返回true時
- 數(shù)字
Integral - 可以應(yīng)用于 Java 整數(shù)類型:
byte
,Byte
,short
,Short
,int
andInteger
,long
,Long
, andBigInteger
(但不是char或者
Character
)浮點- 可應(yīng)用于 Java 浮點類型:
float
、Float
、double
、Double
和BigDecimal
- 日期/時間- 可應(yīng)用于能夠編碼日期或時間的 Java 類型:
long
、Long
、Calendar
和Date
TemporalAccessor
- 百分比- 產(chǎn)生字面的
'%'
('\u0025'
) - 行分隔符 - 生成特定于平臺的行分隔符
對于類別General、Character、Numberic、Integral和Date/Time轉(zhuǎn)換,除非另有說明,否則如果參數(shù)arg為null
,則結(jié)果為 "null
"。
conversion | 參數(shù)類別 | 描述 |
'b','B' | 一般 | 如果參數(shù)arg是null ,那么結(jié)果是 " false "。如果arg是 aboolean 或Boolean ,則結(jié)果是由 . 返回的字符串String.valueOf(arg) 。否則,結(jié)果為“真”。 |
'h','H' | 一般 | 結(jié)果是通過調(diào)用獲得的 Integer.toHexString(arg.hashCode()) 。 |
's','S' | 一般 | 如果arg實現(xiàn)Formattable ,則 arg.formatTo 調(diào)用。否則,通過調(diào)用 獲得結(jié)果arg.toString() 。 |
'c','C' | 字符 | 結(jié)果是一個 Unicode 字符 |
'd' | 整型 | 結(jié)果被格式化為十進制整數(shù) |
'o' | 整型 | 結(jié)果被格式化為八進制整數(shù) |
'x','X' | 整型 | 結(jié)果被格式化為十六進制整數(shù) |
'e','E' | 浮點 | 結(jié)果被格式化為計算機科學記數(shù)法中的十進制數(shù) |
'f' | 浮點 | 結(jié)果被格式化為十進制數(shù) |
'g','G' | 浮點 | 結(jié)果使用計算機科學記數(shù)法或十進制格式進行格式化,具體取決于精度和舍入后的值。 |
'a','A' | 浮點 | 結(jié)果被格式化為帶有有效數(shù)和指數(shù)的十六進制浮點數(shù)。盡管后者屬于 浮點參數(shù)類別 ,但該類型不支持此轉(zhuǎn)換。BigDecimal |
't','T' | 日期/時間 | 日期和時間轉(zhuǎn)換字符的前綴。請參閱日期/時間轉(zhuǎn)換。 |
'%' | 百分 | 結(jié)果是字面的'%' ( '\u0025' ) |
'n' | 行分隔符 | 結(jié)果是特定于平臺的行分隔符 |
日期/時間轉(zhuǎn)換
以下日期和時間轉(zhuǎn)換后綴字符是定義給't','T'-這兩個conversion的。
以下轉(zhuǎn)換字符用于格式化時間:
'H' | 24 小時制的一天中的小時,格式為兩位數(shù),必要時帶有前導零,即00 - 23 . |
---|---|
'I' | 12 小時制的小時,格式為兩位數(shù),必要時帶有前導零,即 01 - 12 . |
'k' | 24 小時制的一天中的小時,即0 - 23 . |
'l' | 12 小時制的小時,即1 - 12 . |
'M' | 小時內(nèi)的分鐘格式為兩位數(shù),必要時帶有前導零,即 00 - 59 . |
'S' | 分鐘內(nèi)的秒數(shù),必要時格式化為帶有前導零的兩位數(shù)字,即00 - 60 (“ 60 ”是支持閏秒所需的特殊值)。 |
'L' | 秒內(nèi)的毫秒格式為三位數(shù)字,必要時帶有前導零,即000 - 999 . |
'N' | 秒內(nèi)的納秒,格式為九位數(shù)字,必要時帶有前導零,即000000000 - 999999999 . |
'p' | 小寫的特定于區(qū)域設(shè)置的上午或下午am 標記,例如“ ”或“ pm ”。使用轉(zhuǎn)換前綴'T' 會強制此輸出為大寫。 |
'z' | RFC 822 風格的數(shù)字時區(qū)從 GMT 偏移,例如-0800 . 該值將根據(jù)夏令時的需要進行調(diào)整。對于 long 、Long 和Date 使用的時區(qū)是此 Java 虛擬機實例的默認時區(qū)。 |
'Z' | 表示時區(qū)縮寫的字符串。該值將根據(jù)夏令時的需要進行調(diào)整。對于 long 、Long 和Date 使用的時區(qū)是此 Java 虛擬機實例的默認時區(qū)。格式化程序的語言環(huán)境將取代參數(shù)的語言環(huán)境(如果有)。 |
's' | 自世界標準時間 1970 年 1 月 1 日開始的紀元開始以來的秒數(shù) 00:00:00 ,即Long.MIN_VALUE/1000 到 Long.MAX_VALUE/1000 . |
'Q' | 自世界標準時間 1970 年 1 月 1 日開始的紀元開始以來的毫秒數(shù)00:00:00 ,即. Long.MIN_VALUE Long.MAX_VALUE |
以下轉(zhuǎn)換字符用于格式化日期:
'B' | 特定于語言環(huán)境的完整月份名稱"January" ,例如"February" . |
---|---|
'b' | 特定于區(qū)域設(shè)置的縮寫月份名稱"Jan" ,例如"Feb" . |
'h' | 與 相同'b' 。 |
'A' | 特定于語言環(huán)境的星期幾的全名,例如"Sunday" ,"Monday" |
'a' | 特定于語言環(huán)境的星期幾的短名稱,例如"Sun" ,"Mon" |
'C' | 四位數(shù)年份除以100 ,格式為兩位數(shù),必要時前導零,即00 - 99 |
'Y' | 年份,格式為至少四位數(shù)字,必要時帶有前導零,例如,對于公歷 ,0092 等于CE。92 |
'y' | 年份的最后兩位數(shù)字,必要時用前導零格式化,即00 - 99 . |
'j' | 一年中的某一天,根據(jù)需要格式化為帶有前導零的三位數(shù)字,例如001 - 366 公歷。 |
'm' | 月份,格式為兩位數(shù),必要時帶有前導零,即01 - 13 . |
'd' | 日期,格式為兩位數(shù),必要時帶有前導零,即 01 - 31 |
'e' | 日期,格式為兩位數(shù),即1 - 31 . |
以下轉(zhuǎn)換字符用于格式化常見的日期/時間組合。
'R' | 24 小時制的時間格式為 "%tH:%tM" |
---|---|
'T' | 24 小時制的時間格式為"%tH:%tM:%tS" . |
'r' | 12 小時制的時間格式為"%tI:%tM:%tS %Tp" . 上午或下午標記 ( '%Tp' ) 的位置可能取決于區(qū)域設(shè)置。 |
'D' | 日期格式為"%tm/%td/%ty" . |
'F' | ISO 8601 完整日期格式為"%tY-%tm-%td" . |
'c' | 日期和時間格式為"%ta %tb %td %tT %tZ %tY" ,例如"Sun Jul 20 16:17:00 EDT 1969" 。 |
任何未明確定義為日期/時間轉(zhuǎn)換后綴的字符都是非法的,并為將來的擴展保留。
Flags
Flags | 一般 | 字符 | 整型 | 浮點 | 日期/時間 | 描述 |
---|---|---|---|---|---|---|
'-' | 是 | 是 | 是 | 是 | 是 | 結(jié)果將左對齊。 |
'#' | 是1 | - | 是3 | 是 | - | 結(jié)果應(yīng)使用依賴于轉(zhuǎn)換的替代形式 |
'+' | - | - | 是4 | 是 | - | 結(jié)果將始終包含一個標志 |
'' | - | - | 是4 | 是 | - | 結(jié)果將包括正值的前導空格 |
'0' | - | - | 是 | 是 | - | 結(jié)果將被零填充 |
',' | - | - | 是2 | 是5 | - | 結(jié)果將包括特定于語言環(huán)境的分組分隔符 |
'(' | - | - | 是4 | 是5 | - | 結(jié)果將用括號括起來負數(shù) |
1取決于 Formattable的定義
。
2僅用于'd'
conversion。
3僅適用于'o'
、'x'
和'X'
conversion。
4對于'd'
,'o'
,'x'
, 和'X'
conversions應(yīng)用于BigInteger
或'd'
應(yīng)用于byte
,Byte
,short
,Short
,int
和Integer
,long
, 和Long
。
5僅適用于'e'
、'E'
、'f'
、'g'
和'G'
conversion。
任何未明確定義為標志的字符都是非法的,并為將來的擴展保留。
到此這篇關(guān)于Java格式字符串的使用的文章就介紹到這了,更多相關(guān)Java格式字符串內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
啟動Springboot項目時找不到Mapper的問題及解決
這篇文章主要介紹了啟動Springboot項目時找不到Mapper的問題及解決方案,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-11-11用Java設(shè)計模式中的觀察者模式開發(fā)微信公眾號的例子
這篇文章主要介紹了用Java設(shè)計模式中的觀察者模式開發(fā)微信公眾號的例子,這里Java的微信SDK等部分便不再詳述,只注重關(guān)鍵部分和開發(fā)過程中觀察者模式優(yōu)點的體現(xiàn),需要的朋友可以參考下2016-02-02SpringSecurity 手機號登錄功能實現(xiàn)
這篇文章主要介紹了SpringSecurity 手機號登錄功能實現(xiàn),本文通過實例代碼給大家介紹的非常詳細,感興趣的朋友一起看看吧2023-12-12Java實現(xiàn)深度優(yōu)先搜索(DFS)和廣度優(yōu)先搜索(BFS)算法
深度優(yōu)先搜索(DFS)和廣度優(yōu)先搜索(BFS)是兩種基本的圖搜索算法,可用于圖的遍歷、路徑搜索等問題。DFS采用棧結(jié)構(gòu)實現(xiàn),從起點開始往深處遍歷,直到找到目標節(jié)點或遍歷完整個圖;BFS采用隊列結(jié)構(gòu)實現(xiàn),從起點開始往廣處遍歷,直到找到目標節(jié)點或遍歷完整個圖2023-04-04