Java字符串格式化工具String.format()完整用法指南
前言
String.format()是 Java 中最核心的字符串格式化工具,能根據(jù)指定模板和參數(shù)生成標準化字符串,替代硬編碼拼接,提升代碼可讀性和跨平臺兼容性。以下是其完整、系統(tǒng)的用法講解。
一、基礎(chǔ)認知
核心作用
將普通文本與動態(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ù)索引復用 / 亂序)。
二、格式說明符的完整結(jié)構(gòu)
格式說明符是String.format()的核心,決定參數(shù)的格式化規(guī)則,完整結(jié)構(gòu)如下:
%[參數(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表示結(jié)果大寫 | %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)示例(覆蓋所有核心場景)
以下示例整合了基礎(chǔ)用法和補充格式符,可直接復制運行:
import java.util.Date;
import java.util.Locale;
public class StringFormatCompleteDemo {
public static void main(String[] args) {
Date now = new Date();
// ========== 場景1:基礎(chǔ)類型格式化(字符串、整數(shù)、浮點數(shù)、布爾、字符) ==========
String basic = String.format(
"姓名:%s,年齡:%d,成績:%.2f,是否及格:%b,等級:%c",
"張三", 25, 89.567, true, 'A'
);
System.out.println("基礎(chǔ)類型:" + 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ù)。
六、核心總結(jié)
- 核心結(jié)構(gòu):格式說明符的核心是
%+轉(zhuǎn)換符(必選),參數(shù)索引、標志、寬度、精度為可選修飾,可靈活控制輸出樣式; - 高頻轉(zhuǎn)換符:
- 基礎(chǔ)類型:
%d(整數(shù))、%s(字符串)、%f(浮點數(shù)); - 日期:
%tF(ISO 標準日期)、%tT(完整時間); - 特殊場景:
%X(十六進制)、%%(百分號)、%n(跨平臺換行);
- 基礎(chǔ)類型:
- 最佳實踐:避免硬編碼拼接字符串,用
String.format()實現(xiàn)標準化輸出;優(yōu)先用%tF/%tT簡化日期格式化,用%n保證跨平臺兼容性。
到此這篇關(guān)于Java字符串格式化工具String.format()完整用法的文章就介紹到這了,更多相關(guān)Java String.format ()用法內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
以Spring Boot的方式顯示圖片或下載文件到瀏覽器的示例代碼
這篇文章主要介紹了以Spring Boot的方式顯示圖片或下載文件到瀏覽器的示例代碼,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-01-01
springboot 多數(shù)據(jù)源的實現(xiàn)(最簡單的整合方式)
這篇文章主要介紹了springboot 多數(shù)據(jù)源的實現(xiàn)(最簡單的整合方式),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2019-11-11
Java RocketMQ 路由注冊與刪除的實現(xiàn)
這篇文章主要介紹了Java RocketMQ 路由注冊與刪除的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2019-11-11
springboot實現(xiàn)公眾號接收回復消息和超過5秒被動回復消息
本文主要介紹了springboot實現(xiàn)公眾號接收回復消息和超過5秒被動回復消息,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-05-05
Java實用小技能之快速創(chuàng)建List常用幾種方式
java集合可以說無論是面試、刷題還是工作中都是非常常用的,下面這篇文章主要給大家介紹了關(guān)于Java實用小技能之快速創(chuàng)建List常用的幾種方式,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下2022-12-12
Java @Value("${xxx}")取properties時中文亂碼的解決
這篇文章主要介紹了Java @Value("${xxx}")取properties時中文亂碼的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-07-07

