String.format輸出格式化的字符串spa
中括號標註([])的爲可選參數.code
常規類型、字符類型和數值類型的格式說明符的語法以下:orm
%[argument_index$][flags][width][.precision]conversion 對象
%[參數索引][標識集][輸出寬度][.限制字符]標明如何格式化字符索引
可選的 argument_index 是一個十進制整數,用於代表參數在參數列表中的位置。第一個參數由 "1$" 引用,第二個參數由 "2$" 引用,依此類推。ci
可選 flags是修改輸出格式的字符集。有效標誌集取決於轉換類型。字符串
可選 width是一個非負十進制整數,代表要向輸出中寫入的最少字符數。(最終該整數轉化的字符串最少包含多少位數字 )io
可選 precision是一個非負十進制整數,一般用來限制字符數。特定行爲取決於轉換類型。(保留精度)form
所需 conversion是一個代表應該如何格式化參數的字符。給定參數的有效轉換集取決於參數的數據類型。test
用來表示日期和時間類型的格式說明符的語法以下:
%[argument_index$][flags][width]conversion
conversion 是一個由兩字符組成的序列。第一個字符是 't' 或 'T'。第二個字符代表所使用的格式。
%[argument_index$][flags][width][.precision]conversion
標識flags:
'-' 在最小寬度內左對齊,不能夠與「用0填充」同時使用
'#' 只適用於8進制和16進制,8進制時在結果前面增長一個0,16進制時在結果前面增長0x
'+' 結果老是包括一個符號(通常狀況下只適用於10進制,若對象爲BigInteger才能夠用於8進制和16進制)
' ' 正值前加空格,負值前加負號(通常狀況下只適用於10進制,若對象爲BigInteger才能夠用於8進制和16進制)
'0' 結果將用零來填充
',' 只適用於10進制,每3位數字之間用「,」分隔
'(' 若參數是負數,則結果中不添加負號而是用圓括號把數字括起來(同‘+’具備一樣的限制)
示例代碼:
int number1 = 5; int number2 = 0; int number3 = -12; System.out.println("\n------------------ 方法 1 ------------\n"); DecimalFormat format = new DecimalFormat("0000"); System.out.println(format.format(number1)); System.out.println(format.format(number2)); System.out.println(format.format(number3)); System.out.println("\n------------------ 方法 2 ------------\n"); // 0 表明前面補充0 // 4 表明長度爲4 // d 表明參數爲正數型 // 輸出格式化的字符串 System.out.println(String.format("%d", number1)); System.out.println(String.format("%04d", number1)); System.out.println(String.format("%04d", number2)); System.out.println(String.format("%04d", number3)); System.out.println(String.format("%04d;%09d", number3, number3)); System.out.println(String.format("%04d%09d", number3, number3)); System.out.println(String.format("%2$08d", -3123, -5566)); //引用第三個參數
運行結果:
------------------ 方法 1 ------------
0005
0000
-0012
------------------ 方法 2 ------------
5
0005
0000
-012
-012;-00000012
-012-00000012
-0005566
%[argument_index$][flags][width][.precision]conversion
標識flags:
'-' 在最小寬度內左對齊,不能夠與 用0填充 同時使用
'+' 結果老是包括一個符號
' ' 正值前加空格,負值前加負號
'0' 結果將用零來填充
',' 每3位數字之間用「,」分隔(只適用於fgG的轉換)
'(' 若參數是負數,則結果中不添加負號而是用圓括號把數字括起來(只適用於eEfgG的轉換)
@Test public void test() { // 還能夠限制小數點後的位數 System.out.printf("%.1f; %.3f%n", -756.403f, 7464.232641d); //輸出後換行 System.out.println(String.format("%1$011.1f;%2$.3f%n", 756.403f, 7464.232641d)); }
運行結果:
-756.4; 7464.233
000000756.4;7464.233
在第二條輸出語句中,
%1$011.1f
格式說明符
1$表示選取第一個輸入參數
0表示填充字符
11表示輸出的位數
. 1表示保留一位小數
@Test public void test9887() { double pi = 3.1415927;//圓周率 //取一位整數 System.out.println(new DecimalFormat("0").format(pi));//3 //取一位整數和兩位小數 System.out.println(new DecimalFormat("0.00").format(pi));//3.14 //取兩位整數和三位小數,整數不足部分以0填補。 System.out.println(new DecimalFormat("00.000").format(pi));// 03.142 //取全部整數部分 System.out.println(new DecimalFormat("#").format(pi));//3 //以百分比方式計數,並取兩位小數 System.out.println(new DecimalFormat("#.##%").format(pi));//314.16% long c = 299792458;//光速 //顯示爲科學計數法,並取五位小數 System.out.println(new DecimalFormat("#.#####E0").format(c));//2.99792E8 //顯示爲兩位整數的科學計數法,並取四位小數 System.out.println(new DecimalFormat("00.####E0").format(c));//29.9792E7 //每三位以逗號進行分隔。 System.out.println(new DecimalFormat(",###").format(c));//299,792,458 //將格式嵌入文本 System.out.println(new DecimalFormat("光速大小爲每秒,###米。").format(c)); }
DecimalFormat 類主要靠 # 和 0 兩種佔位符號來指定數字長度。0 表示若是位數不足則以 0 填充,# 表示只要有可能就把數字拉上這個位置。
============END============