再探Java基礎——String.format(String format, Object… args)的使用

來源:互聯網
上載者:User

標籤:

最近看到類似這樣的一些代碼:String.format("參數%s不可為空", "birthday"); 以前還沒用過這功能不知咐意思,後研究了一下,詳細講解如下。

 

public static String format(String format, Object... args)的功能非常強大,用法非常靈活。主要的意思是返回指定的格式化的字串。Format參數為格式字串文法如下:

%[argument_index$][flags][width][.precision]conversion

“[]”裡的參數表示可選。

可選的 argument_index :下標是一個十進位整數,用於表明參數在參數列表中的位置。

可選的 flags 標誌是修改輸出格式的字元集。有效標誌的集合取決於轉換類型。

可選 width 最小寬度是一個非負十進位整數,表明要向輸出中寫入的最少字元數。

可選 precision 是一個非負十進位整數,通常用來限制字元數。特定行為取決於轉換類型。

所需的 conversion轉換方式是一個表明應該如何格式化參數的字元。給定參數的有效轉換集合取決於參數的資料類型。

 

上面解釋比較枯燥,代碼舉例如下;

Eg1:說明argument_index和width

System.out.println(msg);

String s =  String.format("this is a %2$s %1$s %s %s test", "java", "C++");

this is a C++ java java C++ test

Eg2.說明 flags

System.out.println(String.format("%1$,09d", -3872));

System.out.println(String.format("%1$,010d", -3872));

System.out.println(String.format("%1$,09d", 3872));

System.out.println(String.format("%1$9d", -14));

System.out.println(String.format("%1$-9d", -14));

System.out.println(String.format("%1$(9d", -14));

System.out.println(String.format("%1$#9x", 31));

結果:

-0003,872

-00003,872

00003,872

      -14

-14     

     (14)

     0x1f

下表總結了受支援的標誌y 表示該標誌受指示參數類型支援。

標誌

常規

字元

整數

浮點

日期/時間

說明

‘-‘

y

y

y

y

y

結果將是靠左對齊的。

‘#‘

y1

-

y3

y

-

結果應該使用依賴於轉換類型的替換形式

‘+‘

-

-

y4

y

-

結果總是包括一個符號

‘ ‘

-

-

y4

y

-

對於正值,結果中將包括一個前置空格

‘0‘

-

-

y

y

-

結果將用零來填充

‘,‘

-

-

y2

y5

-

結果將包括特定於語言環境的組分隔字元

‘(‘

-

-

y4

y5

-

結果將是用圓括弧括起來的負數

 

Eg3:說明conversion

System.out.println(String.format("this is:%s %s", "string", "format"));

System.out.println(String.format("%b, %b, %b, %b, %b, %b", "true",true, false, null, 0>1, 1, ""));

System.out.println(String.format("%o", 31));

System.out.println(String.format("%x", 31));

System.out.println(String.format("%e", 12345.6987));

System.out.println(String.format("%a", 12345.6987));

System.out.println(String.format("%c, %c, %c, %c", ‘a‘, ‘b‘, 48, 98));

結果:

this is:string format

true, true, false, false, false, true

37

1f

1.234570e+04

0x1.81cd96f0068dcp13

a, b, 0, b

標誌的說明:

轉換

參數類別

說明

‘b‘, ‘B‘

常規

如果參數 arg 為 null,則結果為 "false"。如果 arg 是一個 boolean 值或 Boolean,則結果為 String.valueOf() 返回的字串。否則結果為 "true"。

‘h‘, ‘H‘

常規

如果參數 arg 為 null,則結果為 "null"。否則,結果為調用 Integer.toHexString(arg.hashCode()) 得到的結果。

‘s‘, ‘S‘

常規

如果參數 arg 為 null,則結果為 "null"。如果 arg 實現 Formattable,則調用 arg.formatTo。否則,結果為調用 arg.toString() 得到的結果。

‘c‘, ‘C‘

字元

結果是一個 Unicode 字元

‘d‘

整數

結果被格式化為十進位整數

‘o‘

整數

結果被格式化為八進位整數

‘x‘, ‘X‘

整數

結果被格式化為十六進位整數

‘e‘, ‘E‘

浮點

結果被格式化為用電腦科學記號標記法表示的十進位數

‘f‘

浮點

結果被格式化為十進位數

‘g‘, ‘G‘

浮點

根據精度和舍入運算後的值,使用電腦科學記數形式或十進位格式對結果進行格式化。

‘a‘, ‘A‘

浮點

結果被格式化為帶有效位元和指數的十六進位浮點數

‘t‘, ‘T‘

日期/時間

日期和時間轉換字元的首碼。請參閱日期/時間轉換。

‘%‘

百分比

結果為字面值 ‘%‘ (‘\u0025‘)

‘n‘

行分隔字元

結果為特定於平台的行分隔字元

 

String msg = String.format("參數%s不可為空", "birthday");

System.out.println(msg);

 

Eg4:格式化日期

Calendar c = Calendar.getInstance();

String data_str = String.format("today is: %1$tY/%1$tm/%1$te, now time is %1$tH:%1$tM:%1$tS", c);

結果:

today is: 2013/10/31, now time is 17:36:49

 

日期類標誌的說明:

以下日期和時間轉換字元尾碼是為 ‘t‘ 和 ‘T‘ 轉換定義的。這些類型類似於但不完全等同於 GNU date 和 POSIX strftime(3c) 定義的那些類型。提供其他轉換類型是為了訪問特定於Java 的功能(例如,‘L‘ 用於秒中的毫秒)。

以下轉換字元用來格式化時間:

‘H‘

‘\u0048‘

24 小時制的小時,被格式化為必要時帶前置字元為零的兩位元,即 00 - 23。00 對應午夜。

‘I‘

‘\u0049‘

12 小時制的小時,被格式化為必要時帶前置字元為零的兩位元,即 01 - 12。01 對應於 1 點鐘(上午或下午)。

‘k‘

‘\u006b‘

24 小時制的小時,即 0 - 23。0 對應於午夜。

‘l‘

‘\u006c‘

12 小時制的小時,即 1 - 12。1 對應於上午或下午的一點鐘。

‘M‘

‘\u004d‘

小時中的分鐘,被格式化為必要時帶前置字元為零的兩位元,即 00 - 59。

‘S‘

‘\u0053‘

分鐘中的秒,被格式化為必要時帶前置字元為零的兩位元,即 00 - 60("60" 是支援閏秒所需的一個特殊值)。

‘L‘

‘\u004c‘

秒中的毫秒,被格式化為必要時帶前置字元為零的三位元,即 000 - 999。

‘N‘

‘\u004e‘

秒中的毫微秒,被格式化為必要時帶前置字元為零的九位元,即 000000000 - 999999999。此值的精度受基礎作業系統或硬體分析的限制。

‘p‘

‘\u0070‘

特定於語言環境的上午或下午標記以小寫形式表示,例如 "am" 或 "pm"。使用轉換首碼 ‘T‘ 可以強行將此輸出轉換為大寫形式。(注意,‘p‘ 產生的輸出是小寫。而GNU date 和 POSIX strftime(3c) 產生的輸出是大寫的。)

‘z‘

‘\u007a‘

相對於 GMT 的 RFC 822 格式的數字時區位移量,例如 -0800。

‘Z‘

‘\u005a‘

表示時區的縮寫形式的字串。

‘s‘

‘\u0073‘

自國際標準時間 (UTC) 1970 年 1 月 1 日 00:00:00 至現在所經過的秒數,也就是 Long.MIN_VALUE/1000 與 Long.MAX_VALUE/1000 之間的差值。

‘Q‘

‘\u004f‘

自國際標準時間 (UTC) 1970 年 1 月 1 日 00:00:00 至現在所經過的毫秒數,即 Long.MIN_VALUE 與 Long.MAX_VALUE 之間的差值。此值的精度受基礎作業系統或硬體分析的限制。

以下轉換字元用來格式化日期:

‘B‘

‘\u0042‘

特定於語言環境的完整月份名稱,例如 "January" 和 "February"。

‘b‘

‘\u0062‘

特定於語言環境的月份簡稱,例如 "Jan" 和 "Feb"。

‘h‘

‘\u0068‘

與 ‘b‘ 相同。

‘A‘

‘\u0041‘

特定於語言環境的星期幾的全稱,例如 "Sunday" 和 "Monday"

‘a‘

‘\u0061‘

特定於語言環境的星期幾的簡稱,例如 "Sun" 和 "Mon"

‘C‘

‘\u0043‘

除以 100 的四位元表示的年份,被格式化為必要時帶前置字元為零的兩位元,即 00 - 99

‘Y‘

‘\u0059‘

年份,被格式化為必要時帶前置字元為零的四位元(至少),例如 0092 等于格裡高利曆的 92 CE。

‘y‘

‘\u0079‘

年份的最後兩位元,被格式化為必要時帶前置字元為零的兩位元,即 00 - 99。

‘j‘

‘\u006a‘

一年中的天數,被格式化為必要時帶前置字元為零的三位元,例如,對于格裡高利曆是 001 - 366。001 對應於一年中的第一天。

‘m‘

‘\u006d‘

月份,被格式化為必要時帶前置字元為零的兩位元,即 01 - 13,其中 "01" 是一年的第一個月,("13" 是支援陰曆所需的一個特殊值)。

‘d‘

‘\u0064‘

一個月中的天數,被格式化為必要時帶前置字元為零的兩位元,即 01 - 31,其中 "01" 是一個月的第一天。

‘e‘

‘\u0065‘

一個月中的天數,被格式化為兩位元,即 1 - 31,其中 "1" 是一個月中的第一天。

以下轉換字元用于格式化常見的日期/時間組合。

‘R‘

‘\u0052‘

24 小時制的時間,被格式化為 "%tH:%tM"

‘T‘

‘\u0054‘

24 小時制的時間,被格式化為 "%tH:%tM:%tS"。

‘r‘

‘\u0072‘

12 小時制的時間,被格式化為 "%tI:%tM:%tS %Tp"。上午或下午標記 (‘%Tp‘) 的位置可能與地區有關。

‘D‘

‘\u0044‘

日期,被格式化為 "%tm/%td/%ty"。

‘F‘

‘\u0046‘

ISO 8601 格式的完整日期,被格式化為 "%tY-%tm-%td"。

‘c‘

‘\u0063‘

日期和時間,被格式化為 "%ta %tb %td %tT %tZ %tY",例如 "Sun Jul 20 16:17:00 EDT 1969"。

 

具體的自個再看文檔去吧!

再探Java基礎——String.format(String format, Object… args)的使用

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.