前言:
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()方法的一些常用功能,也是本人在工作場景中經常用到的。整理歸納方便后續學習查閱,如果后面還有遇到相關方法的其他用法,后期再對該篇文章進行補充。