您好,登錄后才能下訂單哦!
這篇“Java格式字符串怎么使用”文章的知識(shí)點(diǎn)大部分人都不太理解,所以小編給大家總結(jié)了以下內(nèi)容,內(nèi)容詳細(xì),步驟清晰,具有一定的借鑒價(jià)值,希望大家閱讀完這篇文章能有所收獲,下面我們一起來(lái)看看這篇“Java格式字符串怎么使用”文章吧。
該類提供了對(duì)布局調(diào)整和對(duì)齊的支持,對(duì)數(shù)字、字符串和日期/時(shí)間數(shù)據(jù)的常用格式,以及本地特定的輸出。支持常見(jiàn)的Java類型,如byte、BigDecimal和Calendar。通過(guò)Formattable接口為任意的用戶類型提供有限的格式化定制。
格式化器對(duì)于多線程訪問(wèn)不一定安全。線程安全是可選的。
舉例說(shuō)明:
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" // 可選作為第一個(gè)參數(shù)的語(yǔ)言環(huán)境可用于獲取特定于語(yǔ)言環(huán)境的數(shù)字格式??梢越o出精度和寬度,以便對(duì)數(shù)值進(jìn)行舍入與對(duì)齊。 formatter.format(Locale.FRANCE, "e = %+10.4f", Math.E); // -> "e = +2,7183" // '(' 數(shù)字標(biāo)志可用于用小括號(hào)而不是減號(hào)來(lái)格式化負(fù)數(shù)。 組別分隔符會(huì)自動(dòng)插入。 formatter.format("Amount gained or lost since last statement: $ %(,.2f", balanceDelta); // -> "Amount gained or lost since last statement: $ (6,217.58)"
如以下調(diào)用所示,存在用于常見(jiàn)格式化請(qǐng)求的便捷方法:
// 寫一個(gè)格式化的字符串到 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語(yǔ)言的sprintf(3)
,字符串可以使用靜態(tài)方法格式化String.format
:
// 格式化一個(gè)包含日期的字符串 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"
*每個(gè)產(chǎn)生格式化輸出的方法都需要一個(gè)格式字符串和一個(gè)參數(shù)列表。
格式字符串是一個(gè)String
可能包含固定文本和一個(gè)或多個(gè)嵌入格式說(shuō)明符的字符串。
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
方法的第一個(gè)參數(shù)。它包含三個(gè)格式說(shuō)明符“%1$tm
”、“%1$te
”和“%1$tY
”,它們指示應(yīng)如何處理參數(shù)以及應(yīng)在文本中插入的位置。格式字符串的其余部分是固定文本"Dukes Birthday: "
,包括任何其他空格或標(biāo)點(diǎn)符號(hào)。參數(shù)列表包含在格式字符串之后傳遞給方法的所有參數(shù)。
通用、字符和數(shù)字類型的格式說(shuō)明符具有以下語(yǔ)法:
%[argument_index$][flags][width][.precision]conversion
可選的argument_index是一個(gè)十進(jìn)制的整數(shù),表示參數(shù)在參數(shù)列表中的位置。第一個(gè)參數(shù)用 "1$"引用,第二個(gè)用 "2$"引用,等等。
可選的flags是一組用于修改輸出格式的字符。有效標(biāo)志的集合取決于轉(zhuǎn)換的情況。
可選的width是一個(gè)正的十進(jìn)制整數(shù),表示要寫入輸出的最小字符數(shù)。
可選的precision是一個(gè)非負(fù)的十進(jìn)制整數(shù),通常用于限制字符的數(shù)量。具體行為取決于轉(zhuǎn)換的情況。
所需的conversion是一個(gè)字符,表示參數(shù)應(yīng)該如何被格式化。一個(gè)給定參數(shù)的有效轉(zhuǎn)換集取決于該參數(shù)的數(shù)據(jù)類型。
用于表示日期和時(shí)間的類型的格式說(shuō)明符具有以下語(yǔ)法:
%[argument_index$][flags][width]conversion
可選的argument_index、flags和width定義如上。
所需的conversion是兩個(gè)字符序列。第一個(gè)字符是't'
或'T'
。第二個(gè)字符表示要使用的格式。這些字符與 GNUdate
和 POSIXstrftime(3c)
定義的字符相似但不完全相同。
與參數(shù)不對(duì)應(yīng)的格式說(shuō)明符具有以下語(yǔ)法:
%[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當(dāng)Character.isValidCodePoint(int)
返回true時(shí)
數(shù)字
Integral - 可以應(yīng)用于 Java 整數(shù)類型:byte
, Byte
, short
, Short
, int
and Integer
, long
, Long
, and BigInteger
(但不是char或者
Character
)
浮點(diǎn)- 可應(yīng)用于 Java 浮點(diǎn)類型: float
、Float
、double
、Double
和BigDecimal
日期/時(shí)間- 可應(yīng)用于能夠編碼日期或時(shí)間的 Java 類型:long
、Long
、Calendar
和 Date
TemporalAccessor
百分比- 產(chǎn)生字面的'%'
( '\u0025'
)
行分隔符 - 生成特定于平臺(tái)的行分隔符
對(duì)于類別General、Character、Numberic、Integral和Date/Time轉(zhuǎn)換,除非另有說(shuō)明,否則如果參數(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é)果是通過(guò)調(diào)用獲得的 Integer.toHexString(arg.hashCode()) 。 |
's','S' | 一般 | 如果arg實(shí)現(xiàn)Formattable ,則 arg.formatTo 調(diào)用。否則,通過(guò)調(diào)用 獲得結(jié)果arg.toString() 。 |
'c','C' | 字符 | 結(jié)果是一個(gè) Unicode 字符 |
'd' | 整型 | 結(jié)果被格式化為十進(jìn)制整數(shù) |
'o' | 整型 | 結(jié)果被格式化為八進(jìn)制整數(shù) |
'x','X' | 整型 | 結(jié)果被格式化為十六進(jìn)制整數(shù) |
'e','E' | 浮點(diǎn) | 結(jié)果被格式化為計(jì)算機(jī)科學(xué)記數(shù)法中的十進(jìn)制數(shù) |
'f' | 浮點(diǎn) | 結(jié)果被格式化為十進(jìn)制數(shù) |
'g','G' | 浮點(diǎn) | 結(jié)果使用計(jì)算機(jī)科學(xué)記數(shù)法或十進(jìn)制格式進(jìn)行格式化,具體取決于精度和舍入后的值。 |
'a','A' | 浮點(diǎn) | 結(jié)果被格式化為帶有有效數(shù)和指數(shù)的十六進(jìn)制浮點(diǎn)數(shù)。盡管后者屬于 浮點(diǎn)參數(shù)類別 ,但該類型不支持此轉(zhuǎn)換。BigDecimal |
't','T' | 日期/時(shí)間 | 日期和時(shí)間轉(zhuǎn)換字符的前綴。請(qǐng)參閱日期/時(shí)間轉(zhuǎn)換。 |
'%' | 百分 | 結(jié)果是字面的'%' ( '\u0025' ) |
'n' | 行分隔符 | 結(jié)果是特定于平臺(tái)的行分隔符 |
日期/時(shí)間轉(zhuǎn)換
以下日期和時(shí)間轉(zhuǎn)換后綴字符是定義給't','T'-這兩個(gè)conversion的。
以下轉(zhuǎn)換字符用于格式化時(shí)間:
'H' | 24 小時(shí)制的一天中的小時(shí),格式為兩位數(shù),必要時(shí)帶有前導(dǎo)零,即00 - 23 . |
---|---|
'I' | 12 小時(shí)制的小時(shí),格式為兩位數(shù),必要時(shí)帶有前導(dǎo)零,即 01 - 12 . |
'k' | 24 小時(shí)制的一天中的小時(shí),即0 - 23 . |
'l' | 12 小時(shí)制的小時(shí),即1 - 12 . |
'M' | 小時(shí)內(nèi)的分鐘格式為兩位數(shù),必要時(shí)帶有前導(dǎo)零,即 00 - 59 . |
'S' | 分鐘內(nèi)的秒數(shù),必要時(shí)格式化為帶有前導(dǎo)零的兩位數(shù)字,即00 - 60 (“ 60 ”是支持閏秒所需的特殊值)。 |
'L' | 秒內(nèi)的毫秒格式為三位數(shù)字,必要時(shí)帶有前導(dǎo)零,即000 - 999 . |
'N' | 秒內(nèi)的納秒,格式為九位數(shù)字,必要時(shí)帶有前導(dǎo)零,即000000000 - 999999999 . |
'p' | 小寫的特定于區(qū)域設(shè)置的上午或下午am 標(biāo)記,例如“ ”或“ pm ”。使用轉(zhuǎn)換前綴'T' 會(huì)強(qiáng)制此輸出為大寫。 |
'z' | RFC 822 風(fēng)格的數(shù)字時(shí)區(qū)從 GMT 偏移,例如-0800 . 該值將根據(jù)夏令時(shí)的需要進(jìn)行調(diào)整。對(duì)于 long 、Long 和Date 使用的時(shí)區(qū)是此 Java 虛擬機(jī)實(shí)例的默認(rèn)時(shí)區(qū)。 |
'Z' | 表示時(shí)區(qū)縮寫的字符串。該值將根據(jù)夏令時(shí)的需要進(jìn)行調(diào)整。對(duì)于 long 、Long 和Date 使用的時(shí)區(qū)是此 Java 虛擬機(jī)實(shí)例的默認(rèn)時(shí)區(qū)。格式化程序的語(yǔ)言環(huán)境將取代參數(shù)的語(yǔ)言環(huán)境(如果有)。 |
's' | 自世界標(biāo)準(zhǔn)時(shí)間 1970 年 1 月 1 日開始的紀(jì)元開始以來(lái)的秒數(shù) 00:00:00 ,即Long.MIN_VALUE/1000 到 Long.MAX_VALUE/1000 . |
'Q' | 自世界標(biāo)準(zhǔn)時(shí)間 1970 年 1 月 1 日開始的紀(jì)元開始以來(lái)的毫秒數(shù)00:00:00 ,即. Long.MIN_VALUE Long.MAX_VALUE |
以下轉(zhuǎn)換字符用于格式化日期:
'B' | 特定于語(yǔ)言環(huán)境的完整月份名稱"January" ,例如"February" . |
---|---|
'b' | 特定于區(qū)域設(shè)置的縮寫月份名稱"Jan" ,例如"Feb" . |
'h' | 與 相同'b' 。 |
'A' | 特定于語(yǔ)言環(huán)境的星期幾的全名,例如"Sunday" ,"Monday" |
'a' | 特定于語(yǔ)言環(huán)境的星期幾的短名稱,例如"Sun" ,"Mon" |
'C' | 四位數(shù)年份除以100 ,格式為兩位數(shù),必要時(shí)前導(dǎo)零,即00 - 99 |
'Y' | 年份,格式為至少四位數(shù)字,必要時(shí)帶有前導(dǎo)零,例如,對(duì)于公歷 ,0092 等于CE。92 |
'y' | 年份的最后兩位數(shù)字,必要時(shí)用前導(dǎo)零格式化,即00 - 99 . |
'j' | 一年中的某一天,根據(jù)需要格式化為帶有前導(dǎo)零的三位數(shù)字,例如001 - 366 公歷。 |
'm' | 月份,格式為兩位數(shù),必要時(shí)帶有前導(dǎo)零,即01 - 13 . |
'd' | 日期,格式為兩位數(shù),必要時(shí)帶有前導(dǎo)零,即 01 - 31 |
'e' | 日期,格式為兩位數(shù),即1 - 31 . |
以下轉(zhuǎn)換字符用于格式化常見(jiàn)的日期/時(shí)間組合。
'R' | 24 小時(shí)制的時(shí)間格式為 "%tH:%tM" |
---|---|
'T' | 24 小時(shí)制的時(shí)間格式為"%tH:%tM:%tS" . |
'r' | 12 小時(shí)制的時(shí)間格式為"%tI:%tM:%tS %Tp" . 上午或下午標(biāo)記 ( '%Tp' ) 的位置可能取決于區(qū)域設(shè)置。 |
'D' | 日期格式為"%tm/%td/%ty" . |
'F' | ISO 8601 完整日期格式為"%tY-%tm-%td" . |
'c' | 日期和時(shí)間格式為"%ta %tb %td %tT %tZ %tY" ,例如"Sun Jul 20 16:17:00 EDT 1969" 。 |
任何未明確定義為日期/時(shí)間轉(zhuǎn)換后綴的字符都是非法的,并為將來(lái)的擴(kuò)展保留。
Flags
Flags | 一般 | 字符 | 整型 | 浮點(diǎn) | 日期/時(shí)間 | 描述 |
---|---|---|---|---|---|---|
'-' | 是 | 是 | 是 | 是 | 是 | 結(jié)果將左對(duì)齊。 |
'#' | 是1 | - | 是3 | 是 | - | 結(jié)果應(yīng)使用依賴于轉(zhuǎn)換的替代形式 |
'+' | - | - | 是4 | 是 | - | 結(jié)果將始終包含一個(gè)標(biāo)志 |
'' | - | - | 是4 | 是 | - | 結(jié)果將包括正值的前導(dǎo)空格 |
'0' | - | - | 是 | 是 | - | 結(jié)果將被零填充 |
',' | - | - | 是2 | 是5 | - | 結(jié)果將包括特定于語(yǔ)言環(huán)境的分組分隔符 |
'(' | - | - | 是4 | 是5 | - | 結(jié)果將用括號(hào)括起來(lái)負(fù)數(shù) |
1取決于 Formattable的定義
。
2僅用于'd'
conversion。
3僅適用于'o'
、'x'
和'X'
conversion。
4對(duì)于'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。
任何未明確定義為標(biāo)志的字符都是非法的,并為將來(lái)的擴(kuò)展保留。
以上就是關(guān)于“Java格式字符串怎么使用”這篇文章的內(nèi)容,相信大家都有了一定的了解,希望小編分享的內(nèi)容對(duì)大家有幫助,若想了解更多相關(guān)的知識(shí)內(nèi)容,請(qǐng)關(guān)注億速云行業(yè)資訊頻道。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。