Java String.format() 方法

2025年8月17日 | 8 分钟阅读

在 Java 中,字符串格式化使程序员能够生成动态、可读且有组织的字符串。Java 中有多种格式化字符串的方法,但最流行和最有效的方法是 **String.format()** 方法。

Java String.format() Method

String.format() 方法

静态 String.format() 方法使用指定的格式字符串和参数返回一个格式化字符串。它与 C 语言的 **printf()** 函数相当。它返回一个格式化字符串。

Java String 类提供了以下两种格式()方法的变体

参数

  • locale: 它在格式化期间应用。如果 l 为 null,则不应用本地化。它是可选的。
  • format: 格式字符串包含文本和格式说明符。
  • args: 可变数量的参数,将根据格式说明符进行格式化。参数的数量是可变的,也可以是零个。

Exception: 如果格式字符串包含非法语法、与给定参数不兼容的格式说明符、格式字符串所允许的参数不足,或存在其他非法情况,则该方法会抛出 **IllegalFormatException**。

内部实现

示例:字符串格式

Java String 类 format() 方法提供以下两种变体

Locale.US 参数指定格式应遵循美国语言环境的约定。

格式数字是“Hello, %s! You have %d new messages. 指定了两种格式:%s 用于字符串,%d 用于整数。”

参数 "John" 和 5 分别对应 %s 和 %d 格式说明符。

该方法返回一个格式化的字符串,然后将其打印到控制台。

理解这些参数和异常对于正确使用 Java 中的 String.format() 方法非常重要,可确保正确格式化并处理可能的错误。

Java String 格式说明符

下表提供了 Java String 支持的格式说明符。

格式说明符数据类型输出
%afloat(BigDecimal 除外)返回浮点数的十六进制输出。
%b任何类型非 null 则为 "true",null 则为 "false"
%ccharUnicode 字符
%dint(包括 byte、short、int、long、bigint)十进制整数
%efloat科学计数法的十进制数
%ffloat十进制数
%gfloat十进制数,根据精度和值可能为科学计数法。
%h任何类型hashCode() 方法值的十六进制字符串。
%n特定于平台的行分隔符。
%oint(包括 byte、short、int、long、bigint)八进制数
%s任何类型字符串值
%t日期/时间(包括 long、Calendar、Date 和 TemporalAccessor)%t 是日期/时间转换的前缀。此后还需要更多的格式化标志。请参阅下文的日期/时间转换。
%xint(包括 byte、short、int、long、bigint)十六进制字符串。

示例-1:String.format() 方法

示例

编译并运行

输出

name is Andrew
value is 32.334340
value is                  32.334340000000

说明

sf1 使用占位符 %s 格式化字符串,结果为 "name is Andrew"。

sf2 使用 %f 格式化浮点数,结果为 "value is 32.334340"。

sf3 使用 %32.12f 格式化浮点数,最小宽度为 32 个字符,小数点后 12 位,结果为 "value is 32.334340000000

这些示例说明了 `String.format()` 如何让我们使用占位符格式化字符串并控制数字的外观,包括为浮点数指定最小宽度和精度。

示例-2:String.format() 方法

该方法支持各种数据类型,并将它们格式化为字符串类型。

示例

编译并运行

输出

101
Alice
101.000000
65
c

说明

str1 使用 %d 格式化整数,结果为字符串 "101"。

str2 使用 %s 格式化字符串,结果为 "Alice"。

str3 使用 %f 格式化浮点数,结果为 "101.000000"。

str4 使用 %x 将整数格式化为十六进制,结果为 "65"(101 的十六进制)。

str5 使用 %c 格式化字符,结果为 "c"。

这些示例演示了如何使用 String.format() 方法格式化不同的数据类型,根据您的需求提供格式化输出的灵活性。

示例-2:String.format() 方法

除了格式化之外,我们还可以设置任何值的宽度、填充等。让我们看一个设置整数值宽度和填充的示例。

示例

编译并运行

输出

101
|       101|
|101       |
| 101|
|0000000101|

说明

str1 使用 %d 格式化整数,结果为字符串 "101"。

str2 使用最小宽度为 10 个字符、右对齐格式化一个整数,结果为 "| 101|"。

str3 使用最小宽度为 10 个字符、左对齐格式化一个整数,结果为 "|101 |"。

str4 使用正数前的空格格式化一个整数,结果为 "| 101|"。

str5 使用最小宽度为 10 个字符、用前导零填充格式化一个整数,结果为 "|0000000101|"。

这些示例演示了 Java String.format() 方法提供的各种格式化选项,允许您控制字符串中整数的外观。

Java String 格式说明符

Java String.format() 方法中的格式说明符允许我们控制数据在格式化字符串中的显示方式。以下是格式说明符的一些常见用例

格式化数字

格式说明符描述
%d格式化整数。
%f格式化浮点数。
%e, %E以科学计数法格式化浮点数。
%x, %X以十六进制格式化整数。
%o以八进制格式化整数。

示例

输出: 整数:42,浮点数:3.14

格式化字符串

%s: 格式化字符串。

示例

输出: Hello, Alice!

格式化布尔值

%b: 格式化布尔值。

示例

输出: Is Admin: true

格式化字符

%c: 格式化字符。

示例

输出: Grade: A

指定宽度和精度

我们可以指定格式化输出的最小宽度和精度。

示例

输出: Value: 123

日期和时间格式化(使用 %t)

%t 后跟一个转换字符可格式化日期和时间值。

转换字符包括

格式说明符描述
%tA星期几的全称
%tB月份的全称
%td月份(2 位数字)
%tm月份(2 位数字)
%tY年份(4 位数字)
%tH一天中的小时(24 小时制)
%tM分钟
%tS第二个

示例:日期和时间说明符

输出: Today's date is Sunday, 06 February 2024

这些只是 Java String.format() 方法中使用格式说明符的几个示例。它们为在字符串中动态格式化数据提供了一个强大的机制。

区域设置特定格式

String.format() 方法有一个接受 Locale 对象的重载版本,这对于国际化至关重要。

语法

示例:区域设置特定格式

示例

编译并运行

输出

Salary: $123,456.78
Gehalt: 123.456,78€
Salaire : 123 456,78 €

性能考虑

尽管 String.format() 功能强大,但其解析格式字符串和生成新的 Formatter 对象的开销使其在基本字符串构建方面不如其他方法高效。对于基本串联,简单的选项是 **+ 运算符** 或 **StringBuilder**。对于复杂的格式化,String.format() 提供了最佳的可读性、可维护性和功能。

模板文字(文本块)

它们本质上是一种用于多行字符串的字符串格式化类型,于 Java 15 中引入。它们提高了复杂、多行字符串模板的可读性,但不能直接替代 String.format()。文本块可与 String.format() 一起使用。

示例

编译并运行

输出

Hello Alice! Welcome to London. We hope you enjoy your stay.

说明

新功能使创建和管理多行字符串变得更加容易,尤其是在处理 JSON、XML 或 SQL 查询时。字符串本身的 String.formatted() 方法是一种将 String.format() 应用于文本块的便捷方法。

String.format() 方法的特性

指定宽度和精度:我们可以在格式化输出中指定最小宽度和精度。

指定参数索引:我们可以指定要排序的参数的索引。

区域设置支持:我们可以指定一个位置来应用特定于区域设置的规则。

为什么使用 Java 中的 String.format() 方法?

可读性:通过将格式与数据分开,提高代码的可读性。

本地化:通过允许用户轻松地根据本地化转换格式来促进本地化。

动态格式化:允许根据运行时数据动态格式化字符串。

结论

Java 中的 String.format() 方法提供了一种简单的方式来创建带有占位符的排序字符串。通过使用格式说明符和参数,我们可以轻松创建复杂的文本输出。无论我们是创建简单的消息还是格式化复杂的数据,String.format() 都为您提供了我们所需的功能和可读性。

Java String 格式选择题

1. 格式说明符 _______ 用于分别用浮点数和十进制整数格式化字符串。

  1. %f 和 %d
  2. %d 和 %f
  3. %s 和 %f
  4. %c 和 %d

答案:a)

解释: %f 用于浮点数,%d 用于十进制整数。


2. 要在给定宽度内左对齐输出,请在 String.format() 中使用 _______ 标志。

  1. +
  2. 0
  3. -
  4. (

答案:c)

解释: 一个左对齐输出的格式说明符标志是 - 标志。 


3. 哪种方法最适合从带有分隔符的元素列表中构建字符串,例如从 List<String> 创建 CSV 字符串?

  1. append()
  2. format()
  3. join()
  4. concat()

答案:c)

解释: String.join() 是为此用例而创建的,它提供了一种简洁有效的方法,使用给定的分隔符连接一组字符串。


4. _____ 类是管理复杂的、特定于区域设置的消息的更好选择,尤其适用于国际化 (i18n)。

  1. util.Formatter
  2. text.MessageFormat
  3. lang.StringBuilder
  4. util.Locale

答案:b)

解释: MessageFormat 旨在生成可本地化的格式化消息,这些消息可以处理复数和特定性别的措辞等变化。


5. 要重用上一个格式说明符中的参数,请在 String.format() 中使用 _____ 标志。

  1. <
  2. >
  3. ^
  4. &

答案:a)

解释: 为了在不重复参数的情况下格式化同一 Date 对象中的日期或时间的不同部分,< 标志是一个特殊标志,它会重用前一个说明符的参数。


下一个主题Java String getBytes()