String.format()方法詳解


前言:

 String.format()作為文本處理工具,為我們提供強大而豐富的字符串格式化功能,這里根據查閱的資料做個學習筆記,整理成如下文章,供后續復習查閱。

一. format()方法的兩種重載形式:

1. format(String format, Object ... args)

  該方法使用指定的格式字符串和參數返回一個格式化的字符串,格式化后的新字符串使用本地默認的語言環境。

2. format(Local l, String format, Pbject ... args)

  其中,參數l為格式化過程中要應用的語言環境。如果l為null,則不進行本地化。

二. 占位符:

1.對整數進行格式化:%[index$][標識][最小寬度]轉換方式

格式化字符串由4部分組成,特殊的格式常以%index$開頭,index從1開始取值,表示將第index個參數拿進來進行格式化,[最小寬度]的含義也很好理解,就是最終該整數轉化的字符串最少包含多少位數字。剩下2個部分的含義:

標識:

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

轉換方式:

d-十進制 o-八進制 x或X-十六進制

舉個例子,如下:

1 System.out.println(String.format("%1$-9d", 312356));
2 System.out.println(String.format("%1$#9x", 312356));
3 System.out.println(String.format("%1$-#9o", 312356));
4 System.out.println(String.format("%1$+9d", 312356));
5 System.out.println(String.format("%1$ 9d", 312356));
6 System.out.println(String.format("%1$ 9d", -312356));
7 System.out.println(String.format("%1$09d", 312356));
8 System.out.println(String.format("%1$,9d", 312356));
9 System.out.println(String.format("%1$(9d", 312356));

輸出結果:

1 312356   
2   0x4c424
3 01142044 
4   +312356
5    312356
6   -312356
7 000312356
8   312,356
9    312356

2.對浮點數進行格式化:%[index$][標識][最少寬度][.精度]轉換方式

我們可以看到,浮點數的轉換多了一個"精度"選項,可以控制小數點后面的位數。

標識:

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

轉換方式:

  • 'e', 'E' -- 結果被格式化為用計算機科學記數法表示的十進制數
  • 'f' -- 結果被格式化為十進制普通表示方式
  • 'g', 'G' -- 根據具體情況,自動選擇用普通表示方式還是科學計數法方式
  • 'a', 'A' -- 結果被格式化為帶有效位數和指數的十六進制浮點數
 1 System.out.println(String.format("%1$-9.2f", 3123.32));
 2 System.out.println(String.format("%1$+9.2f", 3123.32));
 3 System.out.println(String.format("%1$ 9.2f", -3123.32));
 4 System.out.println(String.format("%1$ 9.2f", 3123.32));
 5 System.out.println(String.format("%1$09.2f", 3123.32));
 6 System.out.println(String.format("%1$,9.2f", 3123.32));
 7 System.out.println(String.format("%1$(9.2f", -3123.32));
 8 System.out.println(String.format("%1$9.2e", -3123.32));
 9 System.out.println(String.format("%1$9.2f", -3123.32));
10 System.out.println(String.format("%1$9.2g", -3123.32));
11 System.out.println(String.format("%1$9.2a", -3123.32));
12         

輸出結果:

 1 3123.32  
 2  +3123.32
 3  -3123.32
 4   3123.32
 5 003123.32
 6  3,123.32
 7 (3123.32)
 8 -3.12e+03
 9  -3123.32
10  -3.1e+03
11 -0x1.86p11

3.對字符進行格式化:

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

三. 對日期進行格式化:

常用的日期格式轉換符如下表所示:

轉換符 說明 示例
%te 一個月中的某一天(1~31) 2
%tb 指定語言環境的月份簡稱 Feb(英文)、二月(中文)
%tB 指定語言環境的月份全稱 February(英文)、二月(中文)
%tA 指定語言環境的星期幾全稱 Monday(英文)、星期一(中文)
%ta 指定語言環境的星期幾簡稱 Mon(英文)、星期一(中文)
%tc 包括全部日期和時間信息 星期二 三月 25 13:37:22 CST 2008
%tY 4位年份 2019
%tj 一年中的第幾天(001~366) 085
%tm 月份 03
%td 一個月中的第幾天(01~31) 02
%ty 2位年份 19

舉個例子,如下:

 1 public class Eval {
 2     public static void main(String[] args) {
 3         Date date = new Date();
 4         String day = String.format("%te", date);
 5         System.out.println("今天是2019年8月:" + day + "號");
 6         String month = String.format("%tb", date);
 7         System.out.println("現在是2019年:" + month);
 8         String xingqi = String.format("%tA", date);
 9         System.out.println("今天是:" + xingqi);
10         String year = String.format("%tY", date);
11         System.out.println("現在是:" + year + "年");
12     }
13 }

輸出結果:

1 今天是2019年8月:20號
2 現在是2019年:八月
3 今天是:星期二
4 現在是:2019年

常用的時間格式轉換符如下表所示:

轉換符 說明 示例
%tH 2位數字的24時制的小時(00~23) 14
%tI 2位數字的12時制的小時(01~12) 05
%tk 2位數字的24時制的小時(0~23) 5
%tl 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至現在經過的秒數 1206345534
%tQ 1970-01-01 00:00:00至現在經過的毫秒數 12923409349034

舉個例子,如下:

 1 public class GetDate {
 2     public static void main(String[] args) {
 3         Date date = new Date();
 4         String hour = String.format("%tH", date);
 5         String minute = String.format("%tM", date);
 6         String second = String.format("%tS", date);
 7         System.out.println("現在是:" + hour + "點" + minute + "分" + second + "秒");
 8         System.out.println("##################################");
 9         String hour2 = String.format("%tI", date);
10         String pm = String.format("%tp", date);
11         System.out.println("現在是:" + pm + hour2 + "點" + minute + "分" + second + "秒");
12     }
13 }

輸出結果:

1 現在是:15點06分37秒
2 ##################################
3 現在是:下午03點06分37秒

常見的日期和時間組合的格式如下表所示:

轉換符   說明 示例
%tF “年-月-日”格式(4位年份) 2019-08-20
%tD “年/月/日”格式(2位年份) 08/20/19
%tc 全部日期和時間信息 星期二 三月 25 15:20:00 CST 2019
%tr “時:分:秒 PM(AM)”格式(12時制) 03:22:06 下午
%tT “時:分:秒”格式(24時制) 15:23:50 
%tR “時:分”格式(24時制) 15:25

舉個例子,如下:

 1 public class DateAndTime {
 2     public static void main(String[] args) {
 3         Date date = new Date();
 4         String time = String.format("%tc", date);
 5         String form = String.format("%tF", date);
 6         String form2 = String.format("%tD", date);
 7         String form3 = String.format("%tr", date);
 8         String form4 = String.format("%tT", date);
 9         String form5 = String.format("%tR", date);
10         System.out.println("全部的時間信息是:" + time);
11         System.out.println("年-月-日格式:" + form);
12         System.out.println("年/月/日格式:" + form2);
13         System.out.println("時:分:秒 PM(AM)格式:" + form3);
14         System.out.println("時:分:秒格式:" + form4);
15         System.out.println("時:分格式:" + form5);
16     }
17 }

輸出結果:

1 全部的時間信息是:星期二 八月 20 15:14:20 CST 2019
2 年-月-日格式:2019-08-20
3 年/月/日格式:08/20/19
4 時:分:秒 PM(AM)格式:03:14:20 下午
5 時:分:秒格式:15:14:20
6 時:分格式:15:14

結尾:

以上內容為format()方法的一些常用功能,也是本人在工作場景中經常用到的。整理歸納方便后續學習查閱,如果后面還有遇到相關方法的其他用法,后期再對該篇文章進行補充。

 


免責聲明!

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



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