字符串格式化


 

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上的社區進行發貼,把您的問題詳細的說明一下,我們的技術人員會在那里給您回復!

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM