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 ()用法内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 以Spring Boot的方式显示图片或下载文件到浏览器的示例代码

    以Spring Boot的方式显示图片或下载文件到浏览器的示例代码

    这篇文章主要介绍了以Spring Boot的方式显示图片或下载文件到浏览器的示例代码,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-01-01
  • springboot 多数据源的实现(最简单的整合方式)

    springboot 多数据源的实现(最简单的整合方式)

    这篇文章主要介绍了springboot 多数据源的实现(最简单的整合方式),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-11-11
  • 使用spring配置文件.xml的头文件

    使用spring配置文件.xml的头文件

    这篇文章主要介绍了使用spring配置文件.xml的头文件问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-01-01
  • Java RocketMQ 路由注册与删除的实现

    Java RocketMQ 路由注册与删除的实现

    这篇文章主要介绍了Java RocketMQ 路由注册与删除的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-11-11
  • struts2自定义MVC框架

    struts2自定义MVC框架

    这篇文章主要为大家详细介绍了struts2如何自定义MVC框架,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-10-10
  • Java8中Lambda表达式的理解与应用

    Java8中Lambda表达式的理解与应用

    Java8最值得学习的特性就是Lambda表达式和Stream API,如果有python或者javascript的语言基础,对理解Lambda表达式有很大帮助,下面这篇文章主要给大家介绍了关于Java8中Lambda表达式的相关资料,需要的朋友可以参考下
    2022-02-02
  • springboot yml配置文件值注入方式

    springboot yml配置文件值注入方式

    这篇文章主要介绍了springboot yml配置文件值注入方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-01-01
  • springboot实现公众号接收回复消息和超过5秒被动回复消息

    springboot实现公众号接收回复消息和超过5秒被动回复消息

    本文主要介绍了springboot实现公众号接收回复消息和超过5秒被动回复消息,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-05-05
  • Java实用小技能之快速创建List常用几种方式

    Java实用小技能之快速创建List常用几种方式

    java集合可以说无论是面试、刷题还是工作中都是非常常用的,下面这篇文章主要给大家介绍了关于Java实用小技能之快速创建List常用的几种方式,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-12-12
  • Java @Value(

    Java @Value("${xxx}")取properties时中文乱码的解决

    这篇文章主要介绍了Java @Value("${xxx}")取properties时中文乱码的解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-07-07

最新评论