跳到主要內容

Java 字串格式 String.format()使用

常規類型的格式化

String 類的 format() 方法用於創建格式化的字符串以及連接多個字符串對像。熟悉 C 語言的讀者應該記得 C 語言的 sprintf() 方法,兩者有類似之處。format() 方法有兩種多型。

  • format(String format, Object... args)
該方法使用指定的字串格式和參數生成格式化的新字串。 新字串始終使用本地語言環境。
  1. format:字串格式。
  2. args:字串格式中由格式說明符引用的參數。如果還有格式說明符以外的參數,則忽略這些額外的參數。參數的數目是可變的,可以為 0。

  • format(Locale locale, String format, Object... args)
該方法使用指定的語言環境、字符串格式和參數生成一個格式化的新字符串。新字符串始終使用指定的語言環境。
  • locale:指定的語言環境。
  • format:字符串格式。
  • args...:字符串格式中由格式說明符引用的參數。如果還有格式說明符以外的參數,則忽略這些額外的參數。參數的數目是可變的,可以為 0。

format() 方法中的字串格式參數有很多種轉換符選項,例如:日期、整數、浮點數等:

轉換符 說明 示例
%s 字串類型 "local string"
%c 字元類型 'x'
%b 布林值類型 true
%d 整數類型(十進制) 99
%x 整數類型(十六進制) FF
%o 整數類型(八進制) 77
%f 浮點類型 99.99
%a 十六進制浮點類型 FF.35AE
%e 指數類型 9.38e+5
%g 通用浮點類型(f和e類型中較短的)
%h 散列碼
%% 百分比類型 %
%n 換行符 "/n"
%tc 包括全部日期和時間信息 星期四 四月 06 15:19:46 TST 2023
%tf “年-月-日” 2023-04-06
%td “月/日/年”格式 04/06/23
%tr “HH:MM:SS PM”格式(12時制) 03:19:46 下午
%tT “HH:MM:SS”格式(24時制) 15:19:46
%tR “HH:MM”格式(24時制) 15:19

範例Code:
public static void main(String[] args) {
   
        String str=null;
 
        // 格式參數$的使用:99,abc
        str=String.format("格式參數$的使用:%1$d,%2$s%n", 99,"abc");
   
        // 輸出字串  println最後會自帶 %n
        System.out.println(str);

        //顯示正負數的符號:+99與-99
        System.out.printf("顯示正負數的符號:%+d與%d%n%n", 99,-99);
   
        //前補0補滿3位:007
        System.out.printf("前補0補滿3位:%03d%n%n", 7);
   
        //前補空白補到8位:       7
        System.out.printf("前補空白補到8位:% 8d%n%n", 7);
   
        //整數分組的效果是:111,222,333
        System.out.printf("整數分組的效果是:%,d%n%n", 111222333);
       
        //小數表示:49.80
        System.out.printf("小數表示:%2.2f%n%n", 49.8);

        // 創建日期對像
        Date date=new Date();
       
        // 全部日期和時間信息:星期四 四月 06 15:19:46 TST 2023
        System.out.printf("全部日期和時間信息:%tc%n%n",date);
       
        //年-月-日格式:2023-04-06
        System.out.printf("年-月-日格式:%tF%n%n",date);
       
        //月/日/年格式:04/06/23
        System.out.printf("月/日/年格式:%tD%n%n",date);
       
        //HH:MM:SS PM格式(12時制):03:19:46 下午
        System.out.printf("HH:MM:SS PM格式(12時制):%tr%n%n",date);
       
        //HH:MM:SS格式(24時制):15:19:46
        System.out.printf("HH:MM:SS格式(24時制):%tT%n%n",date);
       
        //HH:MM格式(24時制):15:19
        System.out.printf("HH:MM格式(24時制):%tR%n%n",date);
       
        //年-月-日 HH:MM:SS格式:2023-04-06 15:19:46
        System.out.printf("年-月-日 HH:MM:SS格式:%1$tF %1$tT%n%n",date);
       
        // 英文月份簡稱:Apr
        System.out.println(String.format(Locale.US,"英文月份簡稱:%tb%n",date));
       
        //本地月份全稱:四月
        System.out.printf("本地月份簡稱:%tb%n%n",date);
       
        //英文月份全稱:April
        System.out.println(String.format(Locale.US,"英文月份全稱:%tB%n",date));
       
        //本地月份全稱:四月
        System.out.printf("本地月份全稱:%tB%n%n",date);
       
        //英文星期的簡稱:Thu
        System.out.printf(String.format(Locale.US,"英文星期的簡稱:%ta%n",date));
       
        //本地星期的簡稱:星期四
        System.out.printf("本地星期的簡稱:%tA%n%n",date);
       
        //年的前兩位數字(前補0至2位):20
        System.out.printf("年的前兩位數字(前補0至2位):%tC%n%n",date);
       
        //年的後兩位數字(前補0至2位):23
        System.out.printf("年的後兩位數字(前補0至2位):%ty%n%n",date);
       
        //一年中的天數(即年的第幾天):096
        System.out.printf("一年中的天數(即年的第幾天):%tj%n%n",date);
       
        //兩位數字的月份(前補0至2位):04
        System.out.printf("兩位數字的月份(前補0至2位):%tm%n%n",date);
       
        //兩位數字的日(前補0至2位):06
        System.out.printf("兩位數字的日(前補0至2位):%td%n%n",date);
       
        //月份的日:6
        System.out.printf("月份的日:%te%n%n",date);

        //24時制的時間 (小時前補0至2位 9位豪秒):15:07:40.771000000
        System.out.printf("24時制的時間(小時前補0至2位 9位豪秒):"+
                            "%1$tH:%1$tM:%1$tS.%1$tN%n%n",date);
       
        //12時制的時間(小時前補0至2位 3位豪秒):03:07:40.771
        System.out.printf("12時制的時間(小時前補0至2位 3位豪秒):"+
                            "%1$tI:%1$tM:%1$tS.%1$tL%n%n",date);
        //小寫字母的上午或下午標記(英):pm
        System.out.println(String.format(
            Locale.US,"小寫字母的上午或下午標記(英):%tp%n",date
        ));

        //小寫字母的上午或下午標記(中):下午
        System.out.printf ("小寫字母的上午或下午標記(中):%tp%n%n",date);
   
        //對於GMT的RFC822時區的偏移量:+0800
        System.out.printf("相對於GMT的RFC822時區的偏移量:%tz%n%n",date);
   
        //時區縮寫字符串:TST
        System.out.printf("時區縮寫字符串:%tZ%n%n",date);
   
        //1970-1-1 00:00:00 到現在所經過的秒數:1680765586
        System.out.printf("1970-1-1 00:00:00 到現在所經過的秒數:%ts%n%n",date);
   
        //1970-1-1 00:00:00 到現在所經過的毫秒數:1680765586727
        System.out.printf("1970-1-1 00:00:00 到現在所經過的毫秒數:%tQ%n%n",date);
    }

留言