溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Java格式字符串怎么使用

發(fā)布時(shí)間:2022-02-07 10:31:31 來(lái)源:億速云 閱讀:120 作者:iii 欄目:開發(fā)技術(shù)

這篇“Java格式字符串怎么使用”文章的知識(shí)點(diǎn)大部分人都不太理解,所以小編給大家總結(jié)了以下內(nèi)容,內(nèi)容詳細(xì),步驟清晰,具有一定的借鑒價(jià)值,希望大家閱讀完這篇文章能有所收獲,下面我們一起來(lái)看看這篇“Java格式字符串怎么使用”文章吧。

Class Formatter

該類提供了對(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、ByteshortShort. 這種轉(zhuǎn)換也可以應(yīng)用于類型int和Integer當(dāng)Character.isValidCodePoint(int)返回true時(shí)

  • 數(shù)字

    Integral - 可以應(yīng)用于 Java 整數(shù)類型:byteByteshortShortintand IntegerlongLong, and BigInteger(但不是char或者 Character

    浮點(diǎn)- 可應(yīng)用于 Java 浮點(diǎn)類型: float、Floatdouble、DoubleBigDecimal

  • 日期/時(shí)間- 可應(yīng)用于能夠編碼日期或時(shí)間的 Java 類型:longLong、Calendar和 DateTemporalAccessor

  • 百分比- 產(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是 abooleanBoolean,則結(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、LongDate使用的時(shí)區(qū)是此 Java 虛擬機(jī)實(shí)例的默認(rèn)時(shí)區(qū)。
'Z'表示時(shí)區(qū)縮寫的字符串。該值將根據(jù)夏令時(shí)的需要進(jìn)行調(diào)整。對(duì)于 long、LongDate使用的時(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_VALUELong.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,intInteger,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è)資訊頻道。

向AI問(wèn)一下細(xì)節(jié)

免責(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)容。

AI