澄清字符串的格式!
用戶友好的介紹
如果您不熟悉String格式或只想快速解決問題,那么String格式的Java文檔不是最容易閱讀和理解的。 盡管它很完整,但它不是非常用戶友好的,所以我想我會嘗試編寫一個更清晰的版本。 這篇文章不僅對您有幫助,而且對我本人來說也很重要。
格式化方法
有兩種提供String格式化行為的方法: format()和printf() 。 format()方法是String.class的靜態方法,而printf()方法是靜態System.out.class的方法。 它們的行為完全相同,并且具有相同的簽名。
format("format string", argument(s)); printf("format string", argument(s));“格式字符串”用于格式化參數列表中的值。
它既可以包含不與任何參數關聯的String文字信息,也可以包含特定于參數的格式數據。 格式化數據將始終以百分號( % )開頭,后跟格式化語義。
讓我們看一些例子。
替換字符串中的占位符
讓我們從最簡單的示例開始。 在占位符下方的代碼段中, %s被替換為名稱Alex 。
String.format("Hello %s", "Alex"); // Hello Alexformat()方法返回一個字符串,其中包含消息Hello Alex 。
多占位符
一次可以替換多個占位符。 在下面的示例中,格式化的String由String和浮點基元組成。
String.format("The %s costs $%f", "Bag", 12.99f); // The Bag costs $12.990000請注意,該數字如何不格式化為貨幣的十進制數字。 接下來讓我們看看數字格式。
如何格式化數字
要將數字格式化為給定的小數位數,請指定%占位符后的位數,如以下代碼段所示。
String.format("The %s costs $%.2f", "Bag", 12.99f); // The Bag costs $12.99添加數字分隔符
要添加數字分隔符,請在%占位符后添加逗號。
String.format("The %s costs $%,.2f", "Car", 54999.99f); // The Car costs $54,999.99逗號是特定于語言環境的,因此在使用該字符對數字進行分組的區域中將使用點(。)分隔符。
讓我們快速查看其他數字格式設置選項。
將負數括在括號中
使用(字符表示負數應放在括號內。
String.format("Absolute zero is %(.2f degrees Celsius", -273.15f); // Absolute zero is (273.15) degrees Celsius包含正號或負號
使用+字符可包含正號或負號。
String.format("Temperature of the Sun %,+d K", 5778); // Temperature of the Sun +5,778 KString.format("Temperature of Jupiter %,+d Celsius", -145); // Temperature of Jupiter -145 Celsius用零填充數字
用0標志和指定寬度來填充零。 在下面的代碼中,寬度為10。
String.format("A padded number %010d", 42); // A padded number 0000000042請注意,零的數量不是10,而是數字的寬度是10,數字后的剩余空間用零填充以使數字10位數長。
左對齊數字
該數字可以左對齊,并具有給定的寬度。
String.format("A left-justified number <%-10d>", 42); // A left-justified number <42 >請注意,左邊的空格數不是10,而是數字的寬度是10,數字后的剩余空間用空格字符填充,以使數字字符變長。
八進制和十六進制數
有兩個用于顯示八進制和十六進制數字的格式設置選項:前導0或0x或不包含任何前導字符。
String.format("An octal number %o", 100); // An octal number 144 String.format("An octal number %#o", 100); // An octal number 0144String.format("An hex number %x", 100); // An hex number 64 String.format("An hex number %#X", 100); // An hex number 0X64注意最后一個示例中的大寫X。 X的大小寫決定了輸出編號中X的大小寫,即小寫的x導致輸出編號中的小寫X。
編號標志匯總
為了總結到目前為止所討論的內容,我準備了一張匯總這些標志的表格。 這不是一個詳盡的列表,因為您必須查閱Java文檔 。
| 旗 | 描述 | 筆記 |
| – | 左對齊這個說法。 | 不能與打擊墊“ 0”一起使用。 還必須指定寬度。 |
| + | 在此參數中包含一個符號(+或–) | 僅帶數字。 d或f。 |
| 0 | 用零填充該參數。 | 僅帶數字。 還必須指定寬度。 d或f。 |
| , | 使用特定于語言環境的分組分隔符(即123,456中的逗號) | 僅帶數字。 d或f。 |
| ( | 將負數括在括號中 | 僅帶數字。 d或f。 |
常規,字符和數字類型的格式說明符具有以下語法:
格式字符串: %[arg_index $] [flags] [width] [。precision]轉換字符
方括號[]中的值是可選的,格式字符串唯一需要的元素是百分比字符%和轉換字符。
轉換字符
為了匯總我所討論的轉換字符,我構建了一個匯總表。 這不是一個詳盡的列表,因為您必須查閱Java文檔 。
| 轉換字符 | 類型 | 筆記 |
| d | 積分 | 小數整數 |
| ? | 積分 | 八進制整數 |
| x,X | 積分 | 十六進制整數 |
| e,E | 浮點 | 科學計數法中的小數 |
| F | 浮點 | 小數 |
| , | 約會時間 | 日期和時間轉換字符的前綴 |
| % | 百分 | 文字百分比 |
如何格式化字符串
字符串的格式與數字的格式幾乎相同,并且將使用許多相同的標志。 讓我們開始看一個用幾個參數格式化的字符串。
多個參數
格式化的字符串可以包含多個不同類型的參數。 以下示例有兩個參數:一個是字符串,另一個是整數。
String.format("The %1s has %2d moons", "Saturn", 53); // The Saturn has 53 moons注意參數的格式。 該數字表示字符串后面的參數順序。 例如,%1s引用第一個參數,%2d引用第二個參數。
格式化字符串
字符串可以采用與數字相同的格式。 讓我們看一些簡單的例子:
指定寬度
String.format("Fun with <%10s>", "Java"); // Fun with < Java>指定寬度的左對齊
output = String.format("Fun with <%-10s>", "Java"); // Fun with <Java >截斷最大字符數
output = String.format("Fun with <%.1s>", "Java"); // Fun with <J>最后的話
這是一些結合了標志,寬度,精度和轉換字符的復合示例。
System. out.printf( "%2$(+,8d, %1$(+,8d", 1234, -5678); // (5.678), ? +1.234- (在負數附近顯示花括號
- +顯示+表示正數
- ,使用本地號碼格式
- 8最小寬度8
- d位
- 0用0填充空間
- –左對齊
- +顯示+表示正數
- ,使用本地號碼格式
- 8最小寬度8
- .4點后的位數,四舍五入
- f浮動
結論
字符串格式化是一個復雜的主題,為確保您了解所有詳細信息,請參閱Java文檔 。
代碼源
本文的代碼源位于我的GitHub存儲庫中 。
進一步閱讀
我通常會發布有關Java EE的帖子。 ? 以下是您可能感興趣的主題的簡短列表:
- Java EE:過去,現在和未來
- 上下文和依賴注入 (CDI)
- 企業Java Bean (EJB)
- 什么是JAX-RS批注?
- @Context注釋用于什么?
學到更多
如果您想提高Java EE技能,請嘗試我的Lynda.com視頻培訓課程。 它們涵蓋了多種Java EE技術:
- 使用JAX-RS 2.0的RESTful服務
- 使用Java EE進行WebSocket編程
- 使用Java EE和JSON處理
- 學習Java企業版
翻譯自: https://www.javacodegeeks.com/2017/09/format-string-clarified.html
總結
- 上一篇: ddos美国服务器(ddos美国)
- 下一篇: 宏任务和微任务执行顺序_确保任务的执行顺