如何格式化字符串,一目了然!

位置:首页>文章>详情   分类: Java教程 > 编程技术   阅读(238)   2024-01-13 16:34:57

用户友好的介绍

如果您不熟悉字符串格式或只想快速解决问题,字符串格式的 Java 文档 并不是最容易阅读和理解的。虽然它很完整,但它不是很用户友好,所以我想我会尝试写一个更清晰的版本。这篇文章既适合您,也适合我自己的回忆录。

格式化方法

有两种方法提供字符串格式化行为:format()printf()format()方法是String.class的静态方法,printf()方法是静态的方法系统输出类。它们的行为方式完全相同并且具有相同的签名。

format("format string", argument(s));
printf("format string", argument(s));

“格式字符串” 用于格式化参数列表 中的值。

它可以包含与任何参数无关的字符串文字信息和特定于参数的格式化数据。格式化数据将始终以百分号 (%) 开头,后跟格式化语义。

让我们看一些例子。

替换字符串中的占位符

让我们从最简单的例子开始。在占位符下方的代码片段中,%s 被替换为名称 Alex

String.format("Hello %s", "Alex");
// Hello Alex

format() 方法返回一个包含消息 Hello Alex 的字符串。

多个占位符

一次可以替换多个占位符。在下面的示例中,格式化的字符串由一个字符串和一个浮点基元组成。

String.format("The %s costs $%f", "Bag", 12.99f);
// The Bag costs $12.990000

请注意该数字如何未格式化为货币的两位小数。接下来让我们看看数字格式。

如何格式化数字

要将数字格式化为给定的小数位数,请指定 % 占位符字符后的位数,如以下代码片段所示。

String.format("The %s costs $%.2f", "Bag", 12.99f);
// The Bag costs $12.99

添加数字分隔符

要添加数字分隔符,请在 % 占位符后添加逗号。

String.format("The %s costs $%,.2f", "Car", 54999.99f);
// The Car costs $54,999.99

逗号是特定于语言环境的,因此点 (.) 分隔符将用于使用该字符对数字进行分组的区域。

让我们快速浏览一下其他数字格式设置选项。

将负数括在括号中

使用 ( 字符表示负数应括在括号中。

String.format("Absolute zero is %(.2f degrees Celsius", -273.15f);
// Absolute zero is (273.15) degrees Celsius

包括正号或负号

使用 + 字符来包含正号或负号。

String.format("Temperature of the Sun %,+d K", 5778);
// Temperature of the Sun +5,778 K
String.format("Temperature of Jupiter %,+d Celsius", -145);
// Temperature of Jupiter -145 Celsius

用零填充数字

用 0 标志和指定宽度来填充数字。在下面的代码中,宽度为 10。

String.format("A padded number %010d", 42);
// A padded number 0000000042

请注意,零的个数不是 10,而是数字的宽度为 10,数字后的剩余空间用零填充,使数字长为 10 位。

左对齐数字

该数字可以显示在左侧并具有给定的宽度。

String.format("A left-justified number <%-10d>", 42);
// A left-justified number <42        >

注意左边的空格数不是10,而是数字的宽度是10,数字后面的剩余空间用空格字符填充,使数字字符变长。

八进制和十六进制数

显示八进制和十六进制数字有两种格式选项:带前导 0 或 0x 或不带任何前导字符。

String.format("An octal number %o", 100);
// An octal number 144
String.format("An octal number %#o", 100);
// An octal number 0144
String.format("An hex number %x", 100);
// An hex number 64
String.format("An hex number %#X", 100);
// An hex number 0X64

请注意最后一个示例中的大写字母 X。 X 的大小写决定了输出数字中 X 的大小写,即小写 x 导致输出数字中的小写 X。

数字标志围捕

为了总结我到目前为止所讨论的内容,我准备了一张总结标志的表格。这不是一个详尽的列表,因为您必须查阅 Java 文档

标记 描述 注释
- 左证明这个论点。 不能与垫“0”一起使用。还必须指定宽度。
+ 在此参数中包含一个符号(+ 或 – ) 只有数字。 d或f。
0 用零填充此参数。 只有数字。还必须指定宽度。 d或f。
, 使用区域特定的分组分隔符(即 123,456 中的逗号) 只有数字。 d或f。
( 将负数括在括号中 只有数字。 d或f。

一般、字符和数字类型的格式说明符具有以下语法:

格式字符串:%[arg_index$][flags][width][.precision]转换字符

方括号 [ ] 中的值是可选的,格式字符串唯一必需的元素是百分比字符 % 和转换字符。

转换字符

为了汇总我谈到的转换字符,我构建了一个汇总表。这不是一个详尽的列表,因为您必须查阅 Java 文档

转换字符 类型 注释
d 积分 十进制整数
o 积分 八进制整数
X, X 积分 十六进制整数
e, E 浮点数 科学记数法中的十进制数
f 浮点数 十进制数
t, T 日期/时间 日期时间转换字符前缀
% 百分比 文字%

如何格式化字符串

字符串的格式化方式与数字的格式化方式非常相似,并且会使用许多相同的标志。让我们从查看带有多个参数的格式化字符串开始。

多个参数

格式化字符串可以包含多个不同类型的参数。以下示例有两个参数:一个是字符串,另一个是整数。

String.format("The %1s has %2d moons", "Saturn", 53);
// The Saturn has 53 moons

注意参数的格式。编号是指参数在字符串之后的顺序。例如,%1s 指的是第一个参数,%2d 指的是第二个参数。

格式化字符串

字符串可以采用与数字相同的格式。让我们看一些简单的例子:

指定宽度

String.format("Fun with <%10s>", "Java");
// Fun with <      Java>

指定带宽度的左对齐

output = String.format("Fun with <%-10s>", "Java");
// Fun with <Java      >

截断最大字符数

output = String.format("Fun with <%.1s>", "Java");
// Fun with <J>

最后的话

下面是一些结合了标志、宽度、精度和转换字符的复合示例。

System. out.printf( "%2$(+,8d, %1$(+,8d", 1234, -5678);
// (5.678),   +1.234
  • ( 用大括号括住负数
  • + 对正数显示 +
  • ,使用本地数字格式
  • 8最小宽度为 8
  • d 位数
System. out.printf( "%2$0+,8d, %1$0+,8d", 1234, -5678);
// -005.678, +001.234
  • 0 用 0 填充空格
 
System. out.printf( "%2$-+,8d, %1$-+,8d", 1234 ,-5678);
// -5.678, +1.234
  • 左对齐
System. out.printf( "%1$+,8.4f", 12234.678878);
// +12.234,6789
  • + 对正数显示 +
  • ,使用本地数字格式
  • 8最小宽度为 8
  • .4小数点后的位数,四舍五入
  • f 浮动

总结

字符串格式化是一个复杂的主题,要确保您了解所有详细信息,请参阅 Java 文档

代码源

本文的代码源在我的 GitHub 存储库 中。

进一步阅读

我通常会发布有关 Java EE 的帖子。以下是您可能感兴趣的主题的简短列表:

  • Java EE:过去、现在和未来
  • 上下文和依赖注入 (CDI)
  • 企业 Java Beans (EJB)
  • 什么是 JAX-RS 注释?
  • @Context注解有什么用?

了解更多

如果您想提升 Java EE 技能,请尝试我的 Lynda.com 视频培训课程。它们涵盖了一系列 Java EE 技术:

  • 使用 JAX-RS 2.0 的 RESTful 服务
  • 使用 Java EE 进行 WebSocket 编程
  • 使用 Java EE 处理 JSON
  • 学习Java企业版
标签2: Java教程
地址:https://www.cundage.com/article/jcg-format-string-clarified.html

相关阅读

Java HashSet 教程展示了如何使用 Java HashSet 集合。 Java哈希集 HashSet 是一个不包含重复元素的集合。此类为基本操作(添加、删除、包含和大小)提供恒定时间性...
SpringApplicationBuilder 教程展示了如何使用 SpringApplicationBuilder 创建一个简单的 Spring Boot 应用程序。 春天 是用于创建企业应...
通道是继 buffers 之后 java.nio 的第二个主要新增内容,我们在之前的教程中已经详细了解了这一点。通道提供与 I/O 服务的直接连接。 通道是一种在字节缓冲区和通道另一端的实体(通...
课程大纲 Elasticsearch 是一个基于 Lucene 的搜索引擎。它提供了一个分布式的、支持多租户的全文搜索引擎,带有 HTTP Web 界面和无模式的 JSON 文档。 Elasti...
解析器是强大的工具,使用 ANTLR 可以编写可用于多种不同语言的各种解析器。 在这个完整的教程中,我们将: 解释基础:什么是解析器,它可以用来做什么 查看如何设置 ANTLR 以便在 Java...
Java 是用于开发各种桌面应用程序、Web 应用程序和移动应用程序的最流行的编程语言之一。以下文章将帮助您快速熟悉 Java 语言,并迈向 API 和云开发等更复杂的概念。 1. Java语言...
Java中的继承是指子类继承或获取父类的所有非私有属性和行为的能力。继承是面向对象编程的四大支柱之一,用于提高层次结构中类之间的代码可重用性。 在本教程中,我们将了解 Java 支持的继承类型,...
Java Message Service 是一种支持正式通信的 API,称为 网络上计算机之间的消息传递。 JMS 为支持 Java 程序的标准消息协议和消息服务提供了一个通用接口。 JMS 提...
之前,我介绍了spring 3 + hibernate 集成 示例和struts 2 hello world 示例。在本教程中,我将讨论在将 spring 框架与 struts 与 hibern...
Java 项目中的一项常见任务是将日期格式化或解析为字符串,反之亦然。解析日期意味着你有一个代表日期的字符串,例如“2017-08-3”,你想把它转换成一个代表 Java 中日期的对象,例如Ja...