String類的靜態format()方法用於創建格式化的字符串。format()方法有兩種重載形式。
(1)format(String format,Object…args)
該方法使用指定的格式字符串和參數返回一個格式化字符串,格式化后的新字符串使用本地默認的語言環境。
語法如下:
str.format(String format,Object…args)
þ format:格式字符串。
þ args:格式字符串中由格式說明符引用的參數。如果還有格式說明符以外的參數,則忽略這些額外的參數。此參數的數目是可變的,可以為0。
(2)format(Local l,String format,Object…args)
þ l:格式化過程中要應用的語言環境。如果l為null,則不進行本地化。
þ format:格式字符串。
þ args:格式字符串中由格式說明符引用的參數。如果還有格式說明符以外的參數,則忽略這些額外的參數。此參數的數目是可變的,可以為0。
1. 日期和時間字符串格式化
在應用程序設計中,經常需要顯示時間和日期。如果想輸出滿意的日期和時間格式,一般需要編寫大量的代碼經過各種算法才能實現。format()方法通過給定的特殊轉換符作為參數來實現對日期和時間的格式化。
þ 日期格式化
先來看下面的例子,返回一個月中的天數,實例代碼如下:
Date date = new Date(); //創建Date對象date
String s = String.format("%te", date); //通過format()方法對date進行格式化
上述代碼中變量s的值是當前日期中的天數,如今天是15號,則s的值為15;%te是轉換符。常用的日期格式化轉換符如表5.1所示。
說明:java.util.Date是Java中的時間日期類,這個類表示特定的瞬間,精確到毫秒。默認獲取當前的時間。
表5.1 常用的日期格式化轉換符
轉換符 |
說明 |
示例 |
%te |
一個月中的某一天(1~31) |
2 |
%tb |
指定語言環境的月份簡稱 |
Feb(英文)、二月(中文) |
%tB |
指定語言環境的月份全稱 |
February(英文)、二月(中文) |
%tA |
指定語言環境的星期幾全稱 |
Monday(英文)、星期一(中文) |
%ta |
指定語言環境的星期幾簡稱 |
Mon(英文)、星期一(中文) |
%tc |
包括全部日期和時間信息 |
星期二三月 25 13:37:22 CST 2008 |
%tY |
4位年份 |
2008 |
%tj |
一年中的第幾天(001~366) |
085 |
%tm |
月份 |
03 |
%td |
一個月中的第幾天(01~31) |
02 |
%ty |
2位年份 |
08 |
【例】在項目中創建類Eval,實現將當前日期信息以4位年份、月份全稱、2位日期形式輸出。
01 import java.util.Date; //導入java.util.Date類
02 publicclass Eval { //新建類
03 publicstaticvoid main(String[] args) { //主方法
04 Date date = new Date(); //創建Date對象date
05 String year = String.format("%tY", date); //將date進行格式化
06 String month = String.format("%tB", date); 07 String day = String.format("%td", date); 08 System.out.println("今年是:" + year + "年"); //輸出信息
09 System.out.println("現在是:" + month); 10 System.out.println("今天是:" + day + "號"); 11 } 12 }
運行結果如圖5.36所示。
圖5.36獲取指定的日期信息
þ 時間格式化
使用format()方法不僅可以完成日期的格式化,也可以實現時間的格式化。時間格式化轉換符要比日期轉換符更多、更精確,它可以將時間格式化為時、分、秒、毫秒。格式化時間的轉換符如表5.2所示。
表5.2 時間格式化轉換符
轉換符 |
說明 |
示例 |
%tH |
2位數字的24時制的小時(00~23) |
14 |
%tI |
2位數字的12時制的小時(01~12) |
05 |
%tk |
1~2位數字的24時制的小時(0~23) |
5 |
%tl |
1~2位數字的12時制的小時(1~12) |
10 |
%tM |
2位數字的分鍾(00~59) |
05 |
%tS |
2位數字的秒數(00~60) |
12 |
%tL |
3位數字的毫秒數(000~999) |
920 |
%tN |
9位數字的微秒數(000000000~999999999) |
062000000 |
%tp |
指定語言環境下上午或下午標記 |
下午(中文)、pm(英文) |
%tz |
相對於GMT RFC 82 格式的數字時區偏移量 |
+0800 |
%tZ |
時區縮寫形式的字符串 |
CST |
%ts |
1970-01-01 00:00:00至現在經過的秒數 |
1206426646 |
%tQ |
1970-01-01 00:00:00至現在經過的毫秒數 |
1206426737453 |
【例】在項目中創建類GetDate,實現將當前時間信息以2位小時數、2位分鍾數、2位秒數形式輸出。
01 import java.util.Date; //導入java.util.Date類
02 publicclass GetDate { //新建類
03 publicstaticvoid main(String[] args) { //主方法
04 Date date = new Date(); //創建Date對象date
05 String hour = String.format("%tH", date); //將date進行格式化
06 String minute = String.format("%tM", date); 07 String second = String.format("%tS", date); 08 //輸出的信息
09 System.out.println("現在是:" + hour + "時" + minute + "分"
10 + second + "秒"); 11 } 12 }
運行結果如圖5.37所示。
圖5.37獲取當前時間
þ 格式化常見的日期時間組合
格式化日期與時間的轉換符定義了各種日期時間組合的格式,其中最常用的日期和時間的組合格式如表5.3所示。
表5.3 常見的日期和時間組合的格式
轉換符 |
說明 |
示例 |
%tF |
“年-月-日”格式(4位年份) |
2008-03-25 |
%tD |
“月/日/年”格式(2位年份) |
03/25/08 |
%tc |
全部日期和時間信息 |
星期二三月 25 15:20:00 CST 2008 |
%tr |
“時:分:秒 PM(AM)”格式(12時制) |
03:22:06 下午 |
%tT |
“時:分:秒”格式(24時制) |
15:23:50 |
%tR |
“時:分”格式(24時制) |
15:25 |
【例】在項目中創建類DateAndTime,在主方法中實現將當前日期時間的全部信息以指定格式的日期輸出。
01 import java.util.Date; //導入java.util.Date類
02 publicclass DateAndTime { //創建類
03 publicstaticvoid main(String[] args) { //主方法
04 Date date = new Date(); //創建Date對象date
05 String time = String.format("%tc", date); //將date格式化
06 String form = String.format("%tF", date); 07 //將格式化后的日期時間輸出
08 System.out.println("全部的時間信息是:" + time); 09 System.out.println("年-月-日格式:" + form); 10 } 11 }
運行結果如圖5.38所示。
圖5.38將當前日期時間的全部信息以指定格式的日期輸出
2. 常規類型格式化
常規類型的格式轉化可應用於任何參數類型,可以通過表5.4所示的轉換符來實現。
表5.4轉換符
轉換符 |
說明 |
示例 |
%b、%B |
結果被格式化為布爾類型 |
true |
%h、%H |
結果被格式化為散列碼 |
A05A5198 |
%s、%S |
結果被格式化為字符串類型 |
“abcd” |
%c、%C |
結果被格式化為字符類型 |
‘a’ |
%d |
結果被格式化為十進制整數 |
40 |
%o |
結果被格式化為八進制整數 |
11 |
%x、%X |
結果被格式化為十六進制整數 |
4b1 |
%e |
結果被格式化為用計算機科學記數法表示的十進制數 |
1.700000e+01 |
%a |
結果被格式化為帶有效位數和指數的十六進制浮點值 |
0X1.C000000000001P4 |
%n |
結果為特定於平台的行分隔符 |
|
%% |
結果為字面值‘%’ |
% |
【例】實現不同類型的格式轉化。
01 publicclass StringFormat { 02 publicstaticvoid main(String[] args) { 03 String str1 = String.format("%c", 'X'); // 輸出字符
04 System.out.println("字母x大寫:" + str1); 05 String str2 = String.format("%d", 1251 + 3950); // 輸出數字
06 System.out.println("1251+3950的結果是:" + str2); 07 String str3 = String.format("%.2f", Math.PI); // 輸出小數點后兩位
08 System.out.println("π取兩位小數點:" + str3); 09 String str4 = String.format("%b", 2 < 3); // 輸出布爾值
10 System.out.println("2<3的結果是:" + str4); 11 // 輸出哈希散列碼,等同Integer.toHexString(3510);
12 String str5 = String.format("%h", 3510); 13 System.out.println("3510的hashCode值:" + str5); 14 String str6 = String.format("%o", 33); // 輸出8進制
15 System.out.println("33的8進制結果是:" + str6); 16 String str7 = String.format("%x", 33); // 輸出16進制
17 System.out.println("33的16進制結果是:" + str7); 18 String str8 = String.format("%e", 120000.1); // 輸出科學計數法
19 System.out.println("120000.1用科學計數法表示:" + str8); 20 // 輸出帶有效位數和指數的16進制浮點值
21 String str9 = String.format("%a", 40.0); 22 System.out.println("40.0的十六進制浮點值:" + str9); 23 // 輸出百分號和數字
24 System.out.println(String.format("天才是由%d%%的靈感,%d%%的汗水。", 1, 99)); 25 } 26 }
運行結果如圖5.39所示。
圖5.39不同類型數字的格式化
使用轉換符,還可以配合轉換符標識來控制輸出的格式,如表5.5所示。
表5.5轉換符標識
標識 |
說明 |
‘-‘ |
在最小寬度內左對其,不可以與’0’填充標識同時使用 |
‘#’ |
用於8進制和16進制格式,在8進制前加一個0,在16進前加一個0x |
‘+’ |
顯示數字的正負號 |
‘’ |
在正數前加空格,在負數前加負號 |
‘0’ |
在不夠最小位數的結果前用0填充 |
‘,’ |
只適用於10進制,每三位數字用‘,’分隔 |
‘(’ |
用括號把負數括起來 |
【例】使用標識控制字符串的輸出格式。
01 publicclass StringFormat2 { 02 publicstaticvoid main(String[] args) { 03 // 讓字符串輸出的最大長度為5,不足長度在前端補空格
04 String str1 = String.format("%5d", 123); 05 System.out.println("輸出長度為5的字符串|" + str1 + "|"); 06 String str2 = String.format("%-5d", 123); // 讓字符串左對齊
07 System.out.println("左對齊|" + str2 + "|"); 08 String str3 = String.format("%#o", 33); // 在8進制前加一個0
09 System.out.println("33的8進制結果是:" + str3); 10 String str4 = String.format("%#x", 33); // 在16進前加一個0x
11 System.out.println("33的16進制結果是:" + str4); 12 String str5 = String.format("%+d", 1); // 顯示數字正負號
13 System.out.println("我是正數:" + str5); 14 String str6 = String.format("%+d", -1); // 顯示數字正負號
15 System.out.println("我是負數:" + str6); 16 String str7 = String.format("% d", 1); // 在正數前補一個空格
17 System.out.println("我是正數,前面有空格" + str7); 18 String str8 = String.format("% d", -1); // 在負數前補一個負號
19 System.out.println("我是負數,前面有負號" + str8); 20 // 讓字符串輸出的最大長度為5,不足長度在前端補0
21 String str9 = String.format("%05d", 12); 22 System.out.println("前面不夠的數用0填充:" + str9); 23 String str10 = String.format("%,d", 123456789); // 用逗號分隔數字
24 System.out.println("用逗號分隔:" + str10); 25 String str11 = String.format("%(d", 13); // 正數無影響
26 System.out.println("我是正數,我沒有括號:" + str11); 27 String str12 = String.format("%(d", -13); // 讓負數用括號括起來
28 System.out.println("我是負數,我有括號的:" + str12); 29 } 30 }
運行結果如圖5.40所示。
圖5.40使用標識控制字符串的輸出格式
本文摘自明日科技出版的《Java從入門到精通(項目案例版)》,轉載請注明出處!!!
感謝讀者朋友對明日科技的支持,如果您對圖書中的講解及光盤源碼有任何問題,可以直接登錄http://www.mingrisoft.com上的社區進行發貼,把您的問題詳細的說明一下,我們的技術人員會在那里給您回復!