Java字符串格式化工具String.format()完整用法指南
前言
String.format()是 Java 中最核心的字符串格式化工具,能根據(jù)指定模板和參數(shù)生成標準化字符串,替代硬編碼拼接,提升代碼可讀性和跨平臺兼容性。以下是其完整、系統(tǒng)的用法講解。
一、基礎認知
核心作用
將普通文本與動態(tài)參數(shù)按指定格式拼接,返回格式化后的字符串(類似 C 語言printf,但不直接輸出,僅返回字符串)。
核心語法
提供兩個重載方法,日常開發(fā)中前者更常用:
// 1. 默認本地環(huán)境(Locale):適配當前系統(tǒng)的數(shù)字/日期格式 public static String format(String format, Object... args) // 2. 指定本地環(huán)境:比如強制使用英文/中文區(qū)域的日期/數(shù)字格式 public static String format(Locale l, String format, Object... args)
format:格式模板,包含普通文本和以%開頭的格式說明符(占位符);args:可變參數(shù),按順序匹配模板中的占位符(可通過參數(shù)索引復用 / 亂序)。
二、格式說明符的完整結構
格式說明符是String.format()的核心,決定參數(shù)的格式化規(guī)則,完整結構如下:
%[參數(shù)索引$][標志][寬度][.精度]轉(zhuǎn)換符
各部分含義(必選 / 可選標注):
| 組成部分 | 是否必選 | 說明 |
|---|---|---|
% | 是 | 格式說明符的起始標記。 |
| 參數(shù)索引 $ | 否 | 指定使用第幾個參數(shù)(如%2$d表示第二個參數(shù)作為整數(shù)),可復用參數(shù)。 |
| 標志 | 否 | 格式化修飾符(如左對齊、補零、千分位、顯示正負號)。 |
| 寬度 | 否 | 指定輸出的最小字符數(shù)(不足時補空格 / 零,超出則按實際長度)。 |
| . 精度 | 否 | 浮點數(shù):指定小數(shù)位數(shù);字符串:指定截取長度;整數(shù) / 字符:無意義。 |
| 轉(zhuǎn)換符 | 是 | 核心,指定參數(shù)的類型(如整數(shù)、字符串、日期、進制)。 |
三、全量常用轉(zhuǎn)換符
轉(zhuǎn)換符決定參數(shù)的解析類型,以下是覆蓋 99% 場景的全量常用轉(zhuǎn)換符(標注「補充」為之前額外新增的):
| 轉(zhuǎn)換符 | 類型 | 說明 | 示例(參數(shù)) | 輸出效果 |
|---|---|---|---|---|
d | 整數(shù)(十進制) | 常規(guī)整數(shù)格式化 | %d (123) | 123 |
s | 字符串 | 任意對象都會調(diào)用toString()轉(zhuǎn)為字符串 | %s ("Java") | Java |
c | 字符 | 單個字符,參數(shù)為char或int(ASCII 碼) | %c ('A') | A |
b | 布爾值 | 非null/ 非false則輸出true,否則false | %b (true) | true |
f | 浮點數(shù)(小數(shù)) | 默認保留 6 位小數(shù),可通過精度調(diào)整 | %f (3.1415) | 3.141500 |
e | 科學計數(shù)法 | 浮點數(shù)轉(zhuǎn)為科學計數(shù)法格式 | %e (123.45) | 1.234500e+02 |
t/T | 日期時間 | 配合子轉(zhuǎn)換符使用(如%tY= 年份),T表示結果大寫 | %tY (new Date()) | 2025 |
%tF | 日期(ISO 標準) | 【補充】快捷格式,等價于%tY-%tm-%td,輸出yyyy-MM-dd | %tF (new Date()) | 2025-12-26 |
%tD | 日期(美式) | 【補充】快捷格式,等價于%tm/%td/%ty,輸出MM/dd/yy | %tD (new Date()) | 12/26/25 |
x/X | 十六進制整數(shù) | 【補充】%x小寫(a-f),%X大寫(A-F) | %X (255) | FF |
o | 八進制整數(shù) | 【補充】十進制轉(zhuǎn)八進制 | %o (10) | 12 |
%% | 百分號本身 | 【補充】轉(zhuǎn)義輸出%,直接寫%會報錯 | %% () | % |
%n | 換行符 | 【補充】跨平臺換行(Windows=\r\n,Linux=\n),替代硬編碼\n | %n () | 系統(tǒng)對應換行符 |
四、綜合實戰(zhàn)示例(覆蓋所有核心場景)
以下示例整合了基礎用法和補充格式符,可直接復制運行:
import java.util.Date;
import java.util.Locale;
public class StringFormatCompleteDemo {
public static void main(String[] args) {
Date now = new Date();
// ========== 場景1:基礎類型格式化(字符串、整數(shù)、浮點數(shù)、布爾、字符) ==========
String basic = String.format(
"姓名:%s,年齡:%d,成績:%.2f,是否及格:%b,等級:%c",
"張三", 25, 89.567, true, 'A'
);
System.out.println("基礎類型:" + basic);
// 輸出:姓名:張三,年齡:25,成績:89.57,是否及格:true,等級:A
// ========== 場景2:寬度/標志修飾(補零、左對齊、千分位、正負號) ==========
String modifier = String.format(
"編號:%05d,姓名:%-10s,金額:%,d 元,溫度:%+d℃",
123, "李四", 1234567, -5
);
System.out.println("寬度/標志:" + modifier);
// 輸出:編號:00123,姓名:李四 ,金額:1,234,567 元,溫度:-5℃
// ========== 場景3:日期時間格式化(含快捷格式%tF/%tD) ==========
String date = String.format(
"ISO日期:%tF,美式日期:%tD,完整時間:%tF %tT%n",
now, now, now, now
);
System.out.println("日期時間:" + date);
// 輸出:ISO日期:2025-12-26,美式日期:12/26/25,完整時間:2025-12-26 15:30:45(示例)
// ========== 場景4:進制轉(zhuǎn)換(十六進制%X、八進制%o) ==========
String radix = String.format(
"255的十六進制(大寫):%04X,10的八進制:%03o",
255, 10
);
System.out.println("進制轉(zhuǎn)換:" + radix);
// 輸出:255的十六進制(大寫):00FF,10的八進制:012
// ========== 場景5:特殊符號(百分號%%、跨平臺換行%n) ==========
String special = String.format(
"成功率:%.1f%%%n第一行內(nèi)容%n第二行內(nèi)容",
99.5
);
System.out.println("特殊符號:" + special);
// 輸出:成功率:99.5%
// 第一行內(nèi)容
// 第二行內(nèi)容
// ========== 場景6:參數(shù)索引(復用/亂序參數(shù)) ==========
String index = String.format(
"數(shù)字:%2$d,字符串:%1$s,再次使用數(shù)字:%2$d",
"測試", 666
);
System.out.println("參數(shù)索引:" + index);
// 輸出:數(shù)字:666,字符串:測試,再次使用數(shù)字:666
}
}
五、注意事項
- 參數(shù)匹配:占位符數(shù)量需與參數(shù)數(shù)量匹配(參數(shù)索引復用除外),否則拋
MissingFormatArgumentException; - 類型匹配:轉(zhuǎn)換符需與參數(shù)類型匹配(如
%d不能接收字符串),否則拋IllegalFormatConversionException; - 浮點數(shù)精度:
%.2f會自動四舍五入(如3.145→3.15); - 轉(zhuǎn)義規(guī)則:輸出
%必須用%%,直接寫%會被識別為格式符起始標記導致報錯; - 跨平臺兼容:優(yōu)先用
%n替代\n,避免 Windows/Linux 換行符不一致問題; - 日期參數(shù):
%tF/%tD僅支持Date/Calendar/LocalDateTime等日期類型參數(shù)。
六、核心總結
- 核心結構:格式說明符的核心是
%+轉(zhuǎn)換符(必選),參數(shù)索引、標志、寬度、精度為可選修飾,可靈活控制輸出樣式; - 高頻轉(zhuǎn)換符:
- 基礎類型:
%d(整數(shù))、%s(字符串)、%f(浮點數(shù)); - 日期:
%tF(ISO 標準日期)、%tT(完整時間); - 特殊場景:
%X(十六進制)、%%(百分號)、%n(跨平臺換行);
- 基礎類型:
- 最佳實踐:避免硬編碼拼接字符串,用
String.format()實現(xiàn)標準化輸出;優(yōu)先用%tF/%tT簡化日期格式化,用%n保證跨平臺兼容性。
到此這篇關于Java字符串格式化工具String.format()完整用法的文章就介紹到這了,更多相關Java String.format ()用法內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Java多線程中的ThreadPoolExecutor使用解析
這篇文章主要介紹了Java多線程中的ThreadPoolExecutor使用解析,作為線程池的緩沖,當新增線程超過maximumPoolSize時,會將新增線程暫時存放到該隊列中,需要的朋友可以參考下2023-12-12
struts2中simple主題下<s:fieldError>標簽默認樣式的移除方法
這篇文章主要給大家介紹了關于struts2中simple主題下<s:fieldError>標簽默認樣式的移除方法,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考借鑒,下面隨著小編來一起學習學習吧2018-10-10
Java NIO:淺析IO模型_動力節(jié)點Java學院整理
在進入Java NIO編程之前,我們今天先來討論一些比較基礎的知識:I/O模型。對java io nio相關知識感興趣的朋友一起學習吧2017-05-05
解決MyBatis-Plus使用動態(tài)表名selectPage不生效的問題
這篇文章主要介紹了如惡化解決MyBatis-Plus使用動態(tài)表名selectPage不生效的問題,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2023-11-11
徹底理解Spring注解@Autowired實現(xiàn)原理
這篇文章主要為大家詳細的介紹了Spring注解@Autowired實現(xiàn)的原理,縝密的邏輯分析,實踐應用示例操作說明,讓大家徹底的理解Spring注解@Autowired背后實現(xiàn)原理2022-03-03

