Java String.format()方法详解:30个实用示例

张开发
2026/4/6 6:27:18 15 分钟阅读

分享文章

Java String.format()方法详解:30个实用示例
好的我们来详细讲解 Java 中String.format()方法的完整用法。这是一个非常强大的工具用于创建格式化的字符串其功能类似于 C 语言中的printf函数。String.format()方法的基本语法是String formattedString String.format(String format, Object... args);format这是一个包含格式说明符的字符串。args这是一个可变参数列表包含零个或多个对象这些对象将被插入到格式字符串中。核心格式说明符格式说明符决定了如何格式化参数。其一般语法如下%[argument_index$][flags][width][.precision]conversion%必需表示格式说明符的开始。argument_index$(可选)指定使用参数列表中的第几个参数索引从 1 开始。例如1$表示第一个参数2$表示第二个参数。如果不指定则按顺序使用参数。flags(可选)提供额外的格式化选项。常见的标志有-在指定的宽度内左对齐默认是右对齐。为数值输出符号或-。0用零填充数值以达到指定宽度。,使用特定于语言环境的千位分隔符例如1,234。(将负数括在括号内。空格在正数前加空格负数前加负号-。width(可选)一个整数指定输出字段的最小宽度。如果输出的内容比宽度短则用空格或0如果指定了0标志填充以达到该宽度。.precision(可选)对于浮点数指定小数点后的精度位数。对于字符串指定输出的最大字符数。以.开头后跟一个整数。conversion(必需)指定参数应如何格式化。这是一个字符告诉方法参数是什么类型以及如何显示它。常见的转换字符有s字符串或任何对象调用其toString()方法。d十进制整数。f十进制浮点数。e,E科学计数法表示的浮点数。g,G根据精度和值可能使用f或e/E格式。c字符。b,B布尔值true或false。h,H参数的哈希码十六进制字符串。%输出一个百分号%。n特定于平台的换行符相当于System.lineSeparator()。t,T日期/时间转换需要额外的后缀字符如tA表示星期几的全名。详细用法与示例基本格式化字符串、整数、浮点数String name Alice; int age 30; double height 1.75; String str1 String.format(Name: %s, Age: %d, Height: %.2f meters, name, age, height); // 结果: Name: Alice, Age: 30, Height: 1.75 meters指定宽度和填充int num 42; String str2 String.format(|%5d|, num); // 右对齐宽度5: | 42| String str3 String.format(|%-5d|, num); // 左对齐宽度5: |42 | String str4 String.format(|%05d|, num); // 右对齐宽度5用0填充: |00042|精度控制浮点数、字符串double pi Math.PI; String str5 String.format(Pi: %.4f, pi); // Pi: 3.1416 String str6 String.format(Pi: %10.4f, pi); // 宽度10精度4: Pi: 3.1416 String longStr HelloWorld; String str7 String.format(First 5 chars: %.5s, longStr); // First 5 chars: Hello标志逗号分隔、符号int bigNumber 1234567; double negative -123.456; String str8 String.format(With commas: %,d, bigNumber); // With commas: 1,234,567 String str9 String.format(Always show sign: %d, 10); // Always show sign: 10 String str10 String.format(Negative in paren: %(d, negative); // Negative in paren: (123)参数索引重用参数、改变顺序String str11 String.format(Name: %1$s, Age: %2$d. Again, Name: %1$s, name, age); // 结果: Name: Alice, Age: 30. Again, Name: Alice String str12 String.format(Age: %2$d, Name: %1$s, name, age); // 结果: Age: 30, Name: Alice布尔值、字符、哈希码boolean flag true; char ch X; String str13 String.format(Flag: %b, flag); // Flag: true String str14 String.format(Character: %c, ch); // Character: X String str15 String.format(Hash of Hello: %h, Hello); // Hash of Hello: 42628b2格式化日期和时间 (使用t或T转换)日期时间格式化需要额外的后缀字符。通常结合java.util.Date或java.time类使用。import java.util.Date; Date now new Date(); String str16 String.format(Current date: %tF, now); // Current date: 2023-10-27 (ISO 8601) String str17 String.format(Time: %tT, now); // Time: 14:30:15 (HH:MM:SS) String str18 String.format(Day of week: %tA, now); // Day of week: Friday注意对于新的日期时间 API (java.time)通常使用其自带的格式化方法如DateTimeFormatter但String.format也能处理LocalDateTime等类型。科学计数法double avogadro 6.02214076e23; String str19 String.format(Avogadros number: %e, avogadro); // Avogadros number: 6.022141e23 String str20 String.format(Avogadros number: %E, avogadro); // Avogadros number: 6.022141E23 String str21 String.format(Avogadros number: %g, avogadro); // Avogadros number: 6.02214e23 (更紧凑)货币格式化 (结合Locale和%f/%,.2f)要格式化货币通常需要指定Locale并使用%,.2f来获得千位分隔符和两位小数然后手动添加货币符号或者使用NumberFormat类。double amount 1234.56; String str22 String.format(Amount: $%,.2f, amount); // US: Amount: $1,234.56 String str23 String.format(Locale.GERMANY, Amount: %,.2f €, amount); // Germany: Amount: 1.234,56 €换行符和字面量%String str24 String.format(Line 1%nLine 2); // 跨平台换行 String str25 String.format(Discount: 20%% off!); // Discount: 20% off!注意事项类型匹配确保传递给格式说明符的参数类型与该说明符的转换字符兼容例如%d对应整数%f对应浮点数。类型不匹配会导致IllegalFormatException。参数数量提供的参数数量必须满足格式字符串中所有非忽略的格式说明符除了%%和%n的需求。否则会导致MissingFormatArgumentException。printf方法System.out.printf(String format, Object... args)方法的功能与String.format()完全相同只是它直接将结果打印到标准输出流而不是返回一个字符串。性能对于简单的字符串连接如Name: name使用操作符通常更高效。String.format()在需要复杂格式化时非常有用。国际化格式化数字千位分隔符、小数点和日期时String.format()的行为依赖于 JVM 的默认Locale。你可以通过String.format(Locale locale, String format, Object... args)指定特定的语言环境。总结String.format()是 Java 中构建格式良好字符串的利器。通过熟练掌握格式说明符的各个组成部分%、索引、标志、宽度、精度、转换字符你可以精确控制数字、字符串、日期等各种类型数据的输出格式满足日志记录、报表生成、用户界面显示等多种需求。

更多文章