2011年12月27日 星期二

[JAVA][轉貼]String.format 方法使用介紹

在JDK1.5中,String類增加了一個非常有用的靜態函數format(String format, Objece... argues),可以將各類數據格式化為字符串並輸出。其中format參數指定了輸出的格式,是最複雜也是最難掌握的一點,而argues則是一系列等 待被格式化的對象。該函數對c語言中printf函數的用法進行了一定的模仿,因此有c語言基礎的人學起來會輕鬆許多。下面我們著重討論一下format 參數的格式及含義。
format參數中可以包含不需要轉化的字符串,這些字符串是你寫什麼,最終就輸出什麼。同時還包含一些特殊格式的內容,來指定將哪個對象來轉換,以及轉 換成什麼形式。這種特殊的格式通通以%index$開頭,index從1開始取值,表示將第index個參數拿進來進行格式化。這一點比c語言要強一點, c語言只能按照參數的順序依次格式化,而java可以選擇第n個參數來格式化。由於該函數可以對任意一個對像進行格式化,不同的對象適用的參數也不同,因 此我們下面分類來討論。

1.對整數進行格式化:

%[index$][標識][最小寬度]轉換方式

我們可以看到,格式化字符串由4部分組成,其中%[index$]的含義我們上面已經講過,[最小寬度]的含義也很好理解,就是最終該整數轉化的字符串最少包含多少位數字。我們來看看剩下2個部分的含義吧:
標識:

'-'    在最小寬度內左對齊,不可以與「用0填充」同時使用
'#'    只適用於8進制和16進制,8進制時在結果前面增加一個0,16進制時在結果前面增加0x
'+'    結果總是包括一個符號(一般情況下只適用於10進制,若對像為BigInteger才可以用於8進制和16進制)
'  '    正值前加空格,負值前加負號(一般情況下只適用於10進制,若對像為BigInteger才可以用於8進制和16進制)
'0'    結果將用零來填充
','    只適用於10進制,每3位數字之間用「,」分隔
'('    若參數是負數,則結果中不添加負號而是用圓括號把數字括起來(同『+』具有同樣的限制)


轉換方式:
d-十進制 o-八進制 x或X-十六進制
上面的說明過於枯燥,我們來看幾個具體的例子。
需要特別注意的一點是:大部分標識字符可以同時使用。

        System.out.println(String.format("%1$,09d", -3123));
        System.out.println(String.format("%1$9d", -31));
        System.out.println(String.format("%1$-9d", -31));
        System.out.println(String.format("%1$(9d", -31));
        System.out.println(String.format("%1$#9x", 5689));

//結果為:
//-0003,123
//      -31
//-31
//     (31)
//   0x1639


2.對浮點數進行格式化:

%[index$][標識][最少寬度][.精度]轉換方式

我們可以看到,浮點數的轉換多了一個「精度」選項,可以控制小數點後面的位數。
標識:

'-'    在最小寬度內左對齊,不可以與「用0填充」同時使用
'+'    結果總是包括一個符號
'  '    正值前加空格,負值前加負號
'0'    結果將用零來填充
','    每3位數字之間用「,」分隔(只適用於fgG的轉換)
'('    若參數是負數,則結果中不添加負號而是用圓括號把數字括起來(只適用於eEfgG的轉換)


轉換方式:

'e', 'E'  --  結果被格式化為用計算機科學記數法表示的十進制數
'f'          --  結果被格式化為十進制普通表示方式
'g', 'G'    --  根據具體情況,自動選擇用普通表示方式還是科學計數法方式
'a', 'A'    --   結果被格式化為帶有效位數和指數的十六進制浮點數


3.對字符進行格式化:
對字符進行格式化是非常簡單的,c表示字符,標識中'-'表示左對齊,其他就沒什麼了。

4.對百分比符號進行格式化:
看了上面的說明,大家會發現百分比符號「%」是特殊格式的一個前綴。那麼我們要輸入一個百分比符號該怎麼辦呢?肯定是需要轉義字符的,但是要注意的是,在這裡轉義字符不是「\」,而是「%」。換句話說,下面這條語句可以輸出一個「12%」:

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


5.取得平台獨立的行分隔符:
System.getProperty("line.separator")可以取得平台獨立的行分隔符,但是用在format中間未免顯得過於煩瑣了。於是format函數自帶了一個平台獨立的行分隔符那就是String.format("%n")。

6.對日期類型進行格式化:
以下日期和時間轉換的後綴字符是為 't' 和 'T' 轉換定義的。這些類型相似於但不完全等同於那些由 GNU date 和 POSIX strftime(3c) 定義的類型。提供其他轉換類型是為了訪問特定於 Java 的功能(如將 'L' 用作秒中的毫秒)。

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

'H'     24 小時制的小時,被格式化為必要時帶前導零的兩位數,即 00 - 23。
'I'     12 小時制的小時,被格式化為必要時帶前導零的兩位數,即 01 - 12。
'k'     24 小時制的小時,即 0 - 23。
'l'     12 小時制的小時,即 1 - 12。
'M'     小時中的分鐘,被格式化為必要時帶前導零的兩位數,即 00 - 59。
'S'     分鐘中的秒,被格式化為必要時帶前導零的兩位數,即 00 - 60 ("60" 是支持閏秒所需的一個特殊值)。
'L'     秒中的毫秒,被格式化為必要時帶前導零的三位數,即 000 - 999。
'N'     秒中的毫微秒,被格式化為必要時帶前導零的九位數,即 000000000 - 999999999。
'p'     特定於語言環境的 上午或下午 標記以小寫形式表示,例如 "am" 或 "pm"。使用轉換前綴 'T' 可以強行將此輸出轉換為大寫形式。
'z'     相對於 GMT 的 RFC 822 格式的數字時區偏移量,例如 -0800。
'Z'     表示時區縮寫形式的字符串。Formatter 的語言環境將取代參數的語言環境(如果有)。
's'     自協調世界時 (UTC) 1970 年 1 月 1 日 00:00:00 至現在所經過的秒數,即 Long.MIN_VALUE/1000 與 Long.MAX_VALUE/1000 之間的差值。
'Q'     自協調世界時 (UTC) 1970 年 1 月 1 日 00:00:00 至現在所經過的毫秒數,即 Long.MIN_VALUE 與 Long.MAX_VALUE 之間的差值。


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

'B'     特定於語言環境的月份全稱,例如 "January" 和 "February"。
'b'     特定於語言環境的月份簡稱,例如 "Jan" 和 "Feb"。
'h'     與 'b' 相同。
'A'     特定於語言環境的星期幾全稱,例如 "Sunday" 和 "Monday"
'a'     特定於語言環境的星期幾簡稱,例如 "Sun" 和 "Mon"
'C'     除以 100 的四位數表示的年份,被格式化為必要時帶前導零的兩位數,即 00 - 99
'Y'     年份,被格式化為必要時帶前導零的四位數(至少),例如,0092 等於格裡高利歷的 92 CE。
'y'     年份的最後兩位數,被格式化為必要時帶前導零的兩位數,即 00 - 99。
'j'     一年中的天數,被格式化為必要時帶前導零的三位數,例如,對於格裡高利歷是 001 - 366。
'm'     月份,被格式化為必要時帶前導零的兩位數,即 01 - 13。
'd'     一個月中的天數,被格式化為必要時帶前導零兩位數,即 01 - 31
'e'     一個月中的天數,被格式化為兩位數,即 1 - 31。


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

'R'     24 小時制的時間,被格式化為 "%tH:%tM"
'T'     24 小時制的時間,被格式化為 "%tH:%tM:%tS"。
'r'     12 小時制的時間,被格式化為 "%tI:%tM:%tS %Tp"。上午或下午標記 ('%Tp') 的位置可能與語言環境有關。
'D'     日期,被格式化為 "%tm/%td/%ty"。
'F'     ISO 8601 格式的完整日期,被格式化為 "%tY-%tm-%td"。
'c'     日期和時間,被格式化為 "%ta %tb %td %tT %tZ %tY",例如 "Sun Jul 20 16:17:00 EDT 1969"。

轉貼的原文

沒有留言:

張貼留言

標籤

Oracle (150) Oracle DB (144) Oracle_DB (143) Oracle SQL (135) JAVA (84) css-基本類 (65) MySQL (59) CSS Selector (58) jQuery (49) JavaScript-基本類 (39) Spring Boot (38) JavaScript (37) JavaScript HTML DOM (37) JavaScript-HTML_DOM (36) CSS3 (30) JAVA-基本類 (28) jQuery UI (27) Apache (23) Oracle GROUP BY (20) datepicker (20) Android (18) Oracle Date (17) c (17) JAVA-lang套件 (16) Linux (16) Oracle Sub Query (16) Spring-基本類 (16) jQuery-基本類 (16) MySQL-進階系列教學 (15) Android基本類 (14) Grails (14) Oracle join (14) SQLite (13) Spring (13) WIN7-基本類 (13) grails-基本類 (13) linux cent os (13) CKEditor (12) JAVA-流程控制類 (12) JAVA_Spring (12) PHP (11) Spring MVC (11) MySQL-基本系列教學 (10) Notepad (10) Notepad++ (10) SQLite for java (10) Windows (10) c/c++ (10) eclipse (9) jQuery-Selector (9) sqldeveloper (9) DB_Toad (8) JAVA_IDE_Eclipse (8) JavaScript-String類 (8) MySQL DB Toad (8) MySQL-DATE相關 (8) MySQL-函式相關 (8) Spring Bean (8) Android Studio (7) HTML5 (7) Hibernate (7) JAVA-OCWCD (7) JavaScript-陣列類 (7) Docker (6) JAVA-程式分享 (6) JAVA.util套件 (6) JavaScript-數學類 (6) MinGw (6) MySQL-其它類 (6) Servlet (6) centos (6) Apache_Tomcat (5) Apache套件_POI (5) CSS (5) JavaScript-Date物件 (5) JavaScript-其它類 (5) PostgreSQL (5) httpd (5) log4j (5) 基本資訊 (5) 開發工具 (5) CSS Properties (4) Dev-C++ (4) IntelliJ IDEA (4) Oracle DDL (4) Sublime (4) TortoiseSVN (4) apache_Maven (4) Android NDK (3) Eclipse IDE for C/C++ (3) Hibernate-基本類 (3) JAVA-問題 (3) JAVA-綀習分享 (3) JVM (3) Linux 指令 (3) Proxy Server (3) Spring Mobile (3) Spring web (3) Squid (3) VirtualBox (3) maven (3) zk (3) 生活其它 (3) Bootstrap (2) Filter (2) JAVA_IO (2) JAVA_其它_itext套件 (2) JBoss-問題 (2) JSP (2) Jboss (2) Listener (2) MySQL-語法快速查詢 (2) Spring AOP (2) Spring Batch (2) Spring Boot Actuator (2) Spring i18n (2) Subversive (2) Tomcat 8 (2) UML (2) WebJars (2) WinMerge (2) c++ (2) c語言綀習題 (2) jQuery Mobile (2) jQuery-事件處理 (2) jQuery-套件類 (2) putty (2) svn (2) weblogic (2) Apache_JMeter (1) Apache套件_BeanUtils (1) Apache套件_StringUtils (1) Base64 (1) Google API (1) HTML5-基本類 (1) Heap (1) JAVA 7 (1) JAVA SE 、JAVA EE、JAVA ME (1) JAVA 日期 (1) JAVA-OCJP (1) JAVA-WEB (1) JAVA_IDE (1) JAVA其它 (1) JBoss Server (1) JDK (1) JMX (1) JRE (1) Java RMI (1) Java String (1) Joda Time (1) Linux_其它 (1) MySQL教學 (1) Oracle_VirtualBox (1) SQL Server (1) SWT (1) Session (1) Stack (1) Struts 2 (1) Tool (1) ZK Studio (1) csv (1) grails-其它類 (1) jQuery-進階 (1) java mail (1) java web (1) java8 (1) jsoup (1) mockmvc (1) modules (1) tomcat (1) win10 (1) 其它類 (1) 圖片工具 (1) 模擬器 (1) 讀書分享 (1) 開發資訊 (1)

精選文章

初學 Java 的 HelloWorld 程式

撰寫一個JAVA程式 public class HelloWorld{ public static void main(String[ ] args){ System.out.println("我第一支Java程式!!"); } } ...