Java字符串格式化工具String.format()完整用法指南

 更新时间:2026年01月13日 11:15:28   作者:码灵  
String.format是Java中的一个静态方法,用于创建格式化的字符串,这篇文章主要介绍了Java字符串格式化工具String.format()完整用法指南的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下

前言

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字符单个字符,参数为charint(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.1453.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保证跨平台兼容性。

到此这篇关于Java字符串格式化工具String.format()完整用法的文章就介绍到这了,更多相关Java String.format ()用法内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Java多线程中的ThreadPoolExecutor使用解析

    Java多线程中的ThreadPoolExecutor使用解析

    这篇文章主要介绍了Java多线程中的ThreadPoolExecutor使用解析,作为线程池的缓冲,当新增线程超过maximumPoolSize时,会将新增线程暂时存放到该队列中,需要的朋友可以参考下
    2023-12-12
  • Java如何定义Long类型

    Java如何定义Long类型

    这篇文章主要介绍了Java如何定义Long类型,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-07-07
  • JAVA设计模式之访问者模式详解

    JAVA设计模式之访问者模式详解

    这篇文章主要介绍了JAVA设计模式之访问者模式详解,访问者模式是对象的行为模式,访问者模式的目的是封装一些施加于某种数据结构元素之上的操作,需要的朋友可以参考下
    2015-04-04
  • 在Java项目中实现日志输出的技巧分享

    在Java项目中实现日志输出的技巧分享

    日志是开发过程中不可或缺的一部分,它可以帮助我们追踪代码的执行过程、排查问题以及监控系统运行状况,然而,大多数开发人员在编写日志时往往只关注于输出必要的信息,而忽略了日志的可读性和美观性,本文将介绍如何在Java项目中实现漂亮的日志输出
    2023-10-10
  • java调用7zip解压压缩包的实例

    java调用7zip解压压缩包的实例

    下面小编就为大家带来一篇java调用7zip解压压缩包的实例。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-09-09
  • 聊聊Spring——AOP详解(AOP概览)

    聊聊Spring——AOP详解(AOP概览)

    这篇文章主要介绍了Spring——AOP详解(AOP概览),具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-08-08
  • struts2中simple主题下<s:fieldError>标签默认样式的移除方法

    struts2中simple主题下<s:fieldError>标签默认样式的移除方法

    这篇文章主要给大家介绍了关于struts2中simple主题下<s:fieldError>标签默认样式的移除方法,文中通过示例代码介绍的非常详细,需要的朋友可以参考借鉴,下面随着小编来一起学习学习吧
    2018-10-10
  • Java NIO:浅析IO模型_动力节点Java学院整理

    Java NIO:浅析IO模型_动力节点Java学院整理

    在进入Java NIO编程之前,我们今天先来讨论一些比较基础的知识:I/O模型。对java io nio相关知识感兴趣的朋友一起学习吧
    2017-05-05
  • 解决MyBatis-Plus使用动态表名selectPage不生效的问题

    解决MyBatis-Plus使用动态表名selectPage不生效的问题

    这篇文章主要介绍了如恶化解决MyBatis-Plus使用动态表名selectPage不生效的问题,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-11-11
  • 彻底理解Spring注解@Autowired实现原理

    彻底理解Spring注解@Autowired实现原理

    这篇文章主要为大家详细的介绍了Spring注解@Autowired实现的原理,缜密的逻辑分析,实践应用示例操作说明,让大家彻底的理解Spring注解@Autowired背后实现原理
    2022-03-03

最新评论