<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    posts - 9, comments - 4, trackbacks - 0, articles - 21

    JAVA STRING FORMAT 簡介

    Posted on 2008-03-27 16:09 一步一步努力向上爬 閱讀(12465) 評論(0)  編輯  收藏 所屬分類: J2SE學習

    JDK1.5中,String類新增了一個很有用的靜態方法String.format():
    format(Locale l, String format, Object... args) 使用指定的語言環境、格式字符串和參數返回一個格式化字符串。
    format(String format, Object... args) 使用指定的格式字符串和參數返回一個格式化字符串。

    舉幾個這個方法實用的例子(注釋是輸出結果):

    CODE:

    long now = System.currentTimeMillis();

    String s = String.format("%tR", now);   // "15:12"

    CODE:

    // Current month/day/year

    Date d = new Date(now);

    s = String.format("%tD", d);                // "07/13/04"

    CODE:

    s = String.format("%,d", Integer.MAX_VALUE); // "2,147,483,647"

    CODE:

    s = String.format("%05d", 123);              // "00123"是不是很方便,讓人動心???哈哈,還有更多的效果!

    其 實format函數有些類似c語言中printf函數,一些格式字符串與 C 類似,但已進行了某些定制,以適應 Java 語言,并且利用了其中一些特性。此方法提供了對布局對齊和排列的支持,以及對數值、字符串和日期/時間數據的常規格式和特定于語言環境的輸出的支持。支持 諸如 byte、BigDecimal 和 Calendar 等常見 Java 類型。

    產生格式化輸出的每個方法都需要格式字符串 和參數列表。格式字符串是一個 String,它可以包含固定文本以及一個或多個嵌入的格式說明符。請考慮以下示例:

    Calendar c = ...;
    String s = String.format("Duke's Birthday: %1$tm %1$te,%1$tY", c);

    格 式字符串是 format 方法的第一個參數。它包含三個格式說明符 "%1$tm"、"%1$te" 和 "%1$tY",它們指出應該如何處理參數以及在文本的什么地方插入它們。格式字符串的其余部分是包括 "Dukes Birthday: " 和其他任何空格或標點符號的固定文本。 參數列表由傳遞給位于格式字符串之后的方法的所有參數組成。在上述示例中,參數列表的大小為 1,由新對象 Calendar 組成。

    1.常規類型、字符類型和數值類型的格式說明符的語法如下:%[argument_index$][flags][width][.precision]conversion

    可選的 argument_index 是一個十進制整數,用于表明參數在參數列表中的位置。第一個參數由 "1$" 引用,第二個參數由 "2$" 引用,依此類推。
    可選的 flags 是修改輸出格式的字符集。有效標志的集合取決于轉換類型。
    可選 width 是一個非負十進制整數,表明要向輸出中寫入的最少字符數。
    可選 precision 是一個非負十進制整數,通常用來限制字符數。特定行為取決于轉換類型。
    所需的 conversion 是一個表明應該如何格式化參數的字符。給定參數的有效轉換集合取決于參數的數據類型。

    2.用來表示日期和時間類型的格式說明符的語法如下:
    %[argument_index$][flags][width]conversion

    可選的 argument_indexflagswidth 的定義同上。
    所需的 conversion 是一個由兩字符組成的序列。第一個字符是 't' 或 'T'。第二個字符表明所使用的格式。這些字符類似于但不完全等同于那些由 GNU date 和 POSIX strftime(3c) 定義的字符。


    3.與參數不對應的格式說明符的語法如下:
    %[flags][width]conversion

    可選 flagswidth 的定義同上。
    所需的 conversion 是一個表明要在輸出中所插內容的字符。

    轉換
    轉換可分為以下幾類:
    1. 常規 - 可應用于任何參數類型
    2. 字符 - 可應用于表示 Unicode 字符的基本類型:char、Character、byte、Byte、short 和 Short。當 Character.isValidCodePoint(int) 返回 true 時,可將此轉換應用于 int 和 Integer 類型
    3. 數值
          1. 整數 - 可應用于 Java 的整數類型:byte、Byte、short、Short、int、Integer、long、Long 和 BigInteger
          2. 浮點 - 可用于 Java 的浮點類型:float、Float、double、Double 和 BigDecimal
    4. 日期/時間 - 可應用于 Java 的、能夠對日期或時間進行編碼的類型:long、Long、Calendar 和 Date。
    5. 百分比 - 產生字面值 '%' ('"u0025')
    6. 行分隔符 - 產生特定于平臺的行分隔符

    下 表總結了受支持的轉換。由大寫字符(如 'B'、'H'、'S'、'C'、'X'、'E'、'G'、'A' 和 'T')表示的轉換與由相應的小寫字符的轉換等同,根據流行的 Locale 規則將結果轉換為大寫形式除外。后者等同于 String.toUpperCase() 的以下調用.

    轉換 參數類別 說明
    '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' 行分隔符 結果為特定于平臺的行分隔符

    任何未明確定義為轉換的字符都是非法字符,并且都被保留,以供將來擴展使用。

    日期/時間轉換
    以 下日期和時間轉換的后綴字符是為 '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"。

    任何未明確定義為轉換的字符都是非法字符,并且都被保留,以供將來擴展使用。


    標志

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

    標志 常規 字符 整數 浮點 日期/時間 說明
    '-' y     y     y     y     y 結果將是左對齊的。
    '#' y1     -     y3     y     -     結果應該使用依賴于轉換類型的替換形式
    '+' -     -     y4     y     -     結果總是包括一個符號
    '   ' -     -     y4     y     -     對于正值,結果中將包括一個前導空格
    '0' -     -     y     y     -     結果將用零來填充
    ',' -     -     y2     y5     -     結果將包括特定于語言環境的組分隔符
    '(' -     -     y4     y5     -     結果將是用圓括號括起來的負數

    1 取決于 Formattable 的定義。

    2 只適用于 'd' 轉換。

    3 只適用于 'o'、'x' 和 'X' 轉換。

    4 對 BigInteger 應用 'd'、'o'、'x' 和 'X' 轉換時,或者對 byte 及 Byte、short 及 Short、int 及 Integer、long 及 Long 分別應用 'd' 轉換時適用。

    5 只適用于 'e'、'E'、'f'、'g' 和 'G' 轉換。

    任何未顯式定義為標志的字符都是非法字符,并且都被保留,以供擴展使用。

    寬度   寬度是將向輸出中寫入的最少字符數。對于行分隔符轉換,不適用寬度,如果提供寬度,則會拋出異常。
    精度   對于常規參數類型,精度是將向輸出中寫入的最多字符數。
    對于浮點轉換 'e'、'E' 和 'f',精度是小數點分隔符后的位數。如果轉換是 'g' 或 'G',那么精度是舍入計算后所得數值的所有位數。如果轉換是 'a' 或 'A',則不必指定精度。
    對于字符、整數和日期/時間參數類型轉換,以及百分比和行分隔符轉換,精度是不適用的;如果提供精度,則會拋出異常。
    參數索引   參數索引是一個十進制整數,用于表明參數在參數列表中的位置。第一個參數由 "1$" 引用,第二個參數由 "2$" 引用,依此類推。
    根據位置引用參數的另一種方法是使用 '<' ('"u003c') 標志,這將會重用以前格式說明符的參數。例如,以下兩條語句產生的字符相同:
    Calendar c = ...;
    String s1 = String.format("Duke's Birthday: %1$tm %1$te,%1$tY", c);

    String s2 = String.format("Duke's Birthday: %1$tm %<$te,%<$tY", c);
    主站蜘蛛池模板: 成年免费大片黄在线观看com| 亚洲AV无码成人网站在线观看| 最新亚洲成av人免费看| 亚洲午夜成人精品电影在线观看 | 99视频在线观看免费| 亚洲国产人成精品| 亚洲综合激情视频| 巨波霸乳在线永久免费视频| 亚洲欧洲日产国码在线观看| 免费观看美女用震蛋喷水的视频| 337p日本欧洲亚洲大胆精品555588 | 亚洲AV永久无码精品一区二区国产| 怡红院亚洲红怡院在线观看| 免费人成视频x8x8入口| 日韩毛片一区视频免费| 亚洲日韩精品A∨片无码| 国产一级片免费看| 亚洲精品国产电影午夜| 成人性生交大片免费看午夜a| 亚洲精品视频在线| 青青青免费国产在线视频小草| 国产精品亚洲四区在线观看 | 免费观看黄网站在线播放| 亚洲乱码无人区卡1卡2卡3| 免费人成年激情视频在线观看| 中文字幕a∨在线乱码免费看 | 日批日出水久久亚洲精品tv| 国产黄在线观看免费观看不卡| 亚洲AV乱码久久精品蜜桃| 毛片免费观看的视频在线| 无遮挡a级毛片免费看| 亚洲AV永久无码精品水牛影视 | 亚洲av中文无码| 久久青草国产免费观看| 亚洲熟伦熟女专区hd高清| 国产精品亚洲综合一区| 青青草97国产精品免费观看| 亚洲av中文无码乱人伦在线播放| 久久不见久久见中文字幕免费| 欧洲乱码伦视频免费国产 | 亚洲成人中文字幕|