跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客GitHub 精选镜像AI 生图工具UI配色美学隐私政策关于联系
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
Javajava

Java String.format() 完整用法指南

Java String.format() 作为核心字符串格式化工具,可依据模板与参数生成标准化文本,替代硬编码拼接以提升可读性与兼容性。支持默认或指定 Locale 的双重载方法。格式说明符由参数索引、标志、宽度、精度及转换符组成,灵活控制输出样式。常用转换符覆盖整数、字符串、浮点数、布尔值、日期时间及进制转换等场景。实战示例演示了基础类型格式化、宽度标志修饰、日期时间处理、进制转换及特殊符号用法。使用时需注意参数数量与类型匹配、浮点精度规则、百分号转义及跨平台换行符选择。建议避免硬编码,优先采用标准格式符实现规范化输出。

修罗发布于 2026/3/20更新于 2026/7/2843 浏览

**String.format()**是 Java 中最核心的字符串格式化工具,能根据指定模板和参数生成标准化字符串,替代硬编码拼接,提升代码可读性和跨平台兼容性。以下是其完整、系统的用法讲解。

一、基础认知

核心作用

将普通文本与动态参数按指定格式拼接,返回格式化后的字符串(类似 C 语言printf,但不直接输出,仅返回字符串)。

核心语法

提供两个重载方法,日常开发中前者更常用:

// 1. 默认本地环境(Locale):适配当前系统的数字/日期格式
public static String format(String format, Object... args)

// 2. 指定本地环境:比如强制使用英文/中文区域的日期/数字格式
public static String format(Locale l, String format, Object... args)
  • format:格式模板,包含普通文本和以%开头的格式说明符(占位符);
  • args:可变参数,按顺序匹配模板中的占位符(可通过参数索引复用 / 乱序)。

二、格式说明符的完整结构

格式说明符是String.format()的核心,决定参数的格式化规则,完整结构如下:

%[参数索引$][标志][宽度][.精度]转换符 

各部分含义(必选 / 可选标注):

组成部分是否必选说明
%是格式说明符的起始标记。
参数索引 $否指定使用第几个参数(如%2$d表示第二个参数作为整数),可复用参数。
标志否格式化修饰符(如左对齐、补零、千分位、显示正负号)。
宽度否指定输出的最小字符数(不足时补空格 / 零,超出则按实际长度)。
. 精度否浮点数:指定小数位数;字符串:指定截取长度;整数 / 字符:无意义。
转换符是核心,指定参数的类型(如整数、字符串、日期、进制)。

三、全量常用转换符

转换符决定参数的解析类型,以下是覆盖 99% 场景的全量常用转换符(标注「补充」为之前额外新增的):

转换符类型说明示例(参数)输出效果
d整数(十进制)常规整数格式化%d (123)123
s字符串任意对象都会调用toString()转为字符串%s ("Java")Java
c字符单个字符,参数为char或int(ASCII 码)%c ('A')A
b布尔值非null/ 非false则输出true,否则false%b (true)true
f浮点数(小数)默认保留 6 位小数,可通过精度调整%f (3.1415)3.141500
e科学计数法浮点数转为科学计数法格式%e (123.45)1.234500e+02
t/T日期时间配合子转换符使用(如%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十六进制整数【补充】%x小写(a-f),%X大写(A-F)%X (255)FF
o八进制整数【补充】十进制转八进制%o (10)12
%%百分号本身【补充】转义输出%,直接写%会报错%% ()%
%n换行符【补充】跨平台换行(Windows=\r\n,Linux=\n),替代硬编码\n%n ()系统对应换行符

四、综合实战示例(覆盖所有核心场景)

以下示例整合了基础用法和补充格式符,可直接复制运行:

import java.util.Date;
import java.util.Locale;

public class StringFormatCompleteDemo {
    public static void main(String[] args) {
        Date now = new Date();

        // ========== 场景 1:基础类型格式化(字符串、整数、浮点数、布尔、字符) ==========
        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:进制转换(十六进制%X、八进制%o) ==========
        String radix = String.format(
            "255 的十六进制(大写):%04X,10 的八进制:%03o",
            255, 10
        );
        System.out.println("进制转换:" + radix);
        // 输出:255 的十六进制(大写):00FF,10 的八进制:012

        // ========== 场景 5:特殊符号(百分号%%、跨平台换行%n) ==========
        String special = String.format(
            "成功率:%.1f%%%n第一行内容%n第二行内容",
            99.5
        );
        System.out.println("特殊符号:" + special);
        // 输出:成功率:99.5%
        // 第一行内容
        // 第二行内容

        // ========== 场景 6:参数索引(复用/乱序参数) ==========
        String index = String.format(
            "数字:%2$d,字符串:%1$s,再次使用数字:%2$d",
            "测试", 666
        );
        System.out.println("参数索引:" + index);
        // 输出:数字:666,字符串:测试,再次使用数字:666
    }
}

五、注意事项

  1. 参数匹配:占位符数量需与参数数量匹配(参数索引复用除外),否则抛MissingFormatArgumentException;
  2. 类型匹配:转换符需与参数类型匹配(如%d不能接收字符串),否则抛IllegalFormatConversionException;
  3. 浮点数精度:%.2f会自动四舍五入(如3.145→3.15);
  4. 转义规则:输出%必须用%%,直接写%会被识别为格式符起始标记导致报错;
  5. 跨平台兼容:优先用%n替代\n,避免 Windows/Linux 换行符不一致问题;
  6. 日期参数:%tF/%tD仅支持Date/Calendar/LocalDateTime等日期类型参数。

六、核心总结

  1. 核心结构:格式说明符的核心是%+转换符(必选),参数索引、标志、宽度、精度为可选修饰,可灵活控制输出样式;
  2. 高频转换符:
    • 基础类型:%d(整数)、%s(字符串)、%f(浮点数);
    • 日期:%tF(ISO 标准日期)、%tT(完整时间);
    • 特殊场景:%X(十六进制)、%%(百分号)、%n(跨平台换行);
  3. 最佳实践:避免硬编码拼接字符串,用String.format()实现标准化输出;优先用%tF/%tT简化日期格式化,用%n保证跨平台兼容性。

目录

  1. 一、基础认知
  2. 核心作用
  3. 核心语法
  4. 二、格式说明符的完整结构
  5. 三、全量常用转换符
  6. 四、综合实战示例(覆盖所有核心场景)
  7. 五、注意事项
  8. 六、核心总结
  • 免费图片AI生成工具免费生成了解详情
  • Magick API 一键接入全球大模型注册送1000万token查看
  • 免费图片视频在线生成30秒,将你的创意变成现实开始设计
  • X/Twitter免费视频下载器免登陆无限额度免费视频解析下载了解详情
  • 100+免费在线小游戏爽一把
极客日志微信公众号二维码

微信扫一扫,关注极客日志

微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

更多推荐文章

查看全部
  • Whisper-large-v3 持续集成:GitHub Actions 自动测试与模型版本灰度发布
  • Python + Neo4j 构建知识图谱实战指南
  • JavaAI 辅助构建 SpringBoot 项目的实战体验
  • Linux 系统安装 JDK 指南
  • 用 AI 独立完成前端设计:ASCII 原型、SVG 线稿与代码生成
  • Linux 网络编程基础:UDP Socket 核心接口详解
  • ZeroClaw Gateway + LM Studio + Reflex 本地 AI 管理面板搭建
  • Vue 实例劫持突破 Web 编辑器粘贴限制
  • C++ STL 进阶:set 与 map 容器详解
  • Telegram 机器人实战:从零搭建自动化群组管理 Bot
  • RAG(检索增强生成) 核心概念与架构解析
  • 本地部署 DeskClaw:构建人机协同的自动化工作流
  • 基于 Java SpringBoot+Vue 的海洋生物管理系统设计与实现
  • Flutter 组件 tavily_dart 适配鸿蒙系统:AI 聚合搜索与语义降噪方案
  • 职场人如何利用 AI 提升效率与创造副业收入
  • AI 写作辅助平台深度评测:炼字工坊与蛙蛙写作
  • Spring 事务管理与传播机制详解
  • DeepSeek 模型部署实战:三款主流云电脑性能与体验对比
  • 滑动窗口四题的共通解法
  • 基于 Java Swing 的个人所得税计算模拟器实现

相关免费在线工具

  • Keycode 信息

    查找任何按下的键的javascript键代码、代码、位置和修饰符。 在线工具,Keycode 信息在线工具,online

  • Escape 与 Native 编解码

    JavaScript 字符串转义/反转义;Java 风格 \uXXXX(Native2Ascii)编码与解码。 在线工具,Escape 与 Native 编解码在线工具,online

  • JavaScript / HTML 格式化

    使用 Prettier 在浏览器内格式化 JavaScript 或 HTML 片段。 在线工具,JavaScript / HTML 格式化在线工具,online

  • JavaScript 压缩与混淆

    Terser 压缩、变量名混淆,或 javascript-obfuscator 高强度混淆(体积会增大)。 在线工具,JavaScript 压缩与混淆在线工具,online

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online