1. 程式人生 > >String.format(String format, Object... args)方法詳解

String.format(String format, Object... args)方法詳解

輸出 控制 8進制 util .get ont 說明文檔 $0 說明符

很多次見到同事使用這個方法,同時看到https://blog.csdn.net/qq_27298687/article/details/68921934這位仁兄寫的非常仔細,我也記錄一下,好加深印象。

這個是從java5的時候添加進去的方法。

/**
* Returns a formatted string using the specified format string and
* arguments.
*
* <p> The locale always used is the one returned by {@link
* java.util.Locale#getDefault() Locale.getDefault()}.
*
* @param format
* A <a href="../util/Formatter.html#syntax">format string</a>
*
* @param args
* Arguments referenced by the format specifiers in the format
* string. If there are more arguments than format specifiers, the
* extra arguments are ignored. The number of arguments is
* variable and may be zero. The maximum number of arguments is
* limited by the maximum dimension of a Java array as defined by
* <cite>The Java&trade; Virtual Machine Specification</cite>.
* The behaviour on a
* {@code null} argument depends on the <a
* href="../util/Formatter.html#syntax">conversion</a>.
*
* @throws java.util.IllegalFormatException
* If a format string contains an illegal syntax, a format
* specifier that is incompatible with the given arguments,
* insufficient arguments given the format string, or other
* illegal conditions. For specification of all possible
* formatting errors, see the <a
* href="../util/Formatter.html#detail">Details</a> section of the
* formatter class specification.
*
* @return A formatted string
*
* @see java.util.Formatter
* @since 1.5
*/
public static String format(String format, Object... args) {
return new Formatter().format(format, args).toString();
}
如果往裏點進去是掉用了java.util.Formatter類的format方法。
這個類裏有詳細的說明文檔:
  • 常規類型、字符類型和數值類型的格式說明符的語法如下:
       %[argument_index$][flags][width][.precision]conversion
     

    可選的 argument_index 是一個十進制整數,用於表明參數在參數列表中的位置。第一個參數由 "1$" 引用,第二個參數由 "2$" 引用,依此類推。

    可選 flags 是修改輸出格式的字符集。有效標誌集取決於轉換類型。

    可選 width 是一個非負十進制整數,表明要向輸出中寫入的最少字符數。

    可選 precision 是一個非負十進制整數,通常用來限制字符數。特定行為取決於轉換類型。

    所需 conversion

    是一個表明應該如何格式化參數的字符。給定參數的有效轉換集取決於參數的數據類型。

  s:字符串

  o:八進制數字

  x:十六進制數字

  d:十進制數字    

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

    可選的 argument_indexflagswidth 的定義同上。

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

    定義的字符。

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

    可選 flagswidth 的定義同上。

    所需的 conversion 是一個表明要在輸出中所插內容的字符。

我在這裏就不一一贅述了,感興趣的同學可以參考jdk文檔 http://tool.oschina.net/apidocs/apidoc?api=jdk-zh

我僅僅舉幾個例子稍做說明:

String.format("你可以成為%s","平凡的人") ------> 你可以成為平凡的人(字符串替換)

String.format("你可以成為%s,他也可以成為%s","平凡的人","不平凡的人") ------> 你可以成為平凡的人,他也可以成為不平凡的人。

String.format("你可以成為%2$s,他也可以成為%1$s","平凡的人","不平凡的人") ------> 你可以成為不平凡的人,他也可以成為平凡的人。(位置控制通過[argument_index$])

String.format("%o", 12)); ---------->14 (10進制轉8進制)

String.format("%x", 12)); ----------> c (10進制轉16進制)

String.format("%1$,d", 12302562); -------------> 12,302,562 (flag 的用法,這裏用都好隔開,並轉換成10進制。)

String.format("%1$08d", 123456);--------------> 00123456 (width的用法,用0填充(flag),最少8位。

好困,下次接著寫吧。睡覺了。

String.format(String format, Object... args)方法詳解