需求澄清_澄清字符串的格式!

需求澄清

需求澄清

用户友好的介绍

如果您不熟悉String格式或只想快速解决问题,那么String格式Java文档不是最容易阅读和理解的。 尽管它很完整,但是它不是非常用户友好的,所以我想我会尝试编写一个更清晰的版本。 这篇文章不仅对您有帮助,而且对我本人来说也很重要。

格式方法

有两种提供String格式设置行为的方法: format()printf()format()方法是String.class的静态方法,而printf()方法是静态System.out.class的方法。 它们的行为完全相同,并且具有相同的签名。

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

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

它既可以包含不与任何参数关联的String文字信息,也可以包含特定于参数的格式数据。 格式化数据将始终以百分号( )开头,后跟格式化语义。

让我们看一些例子。

替换字符串中的占位符

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

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

format()方法返回一个字符串,其中包含消息Hello Alex

多占位符

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

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 积分 十进制整数
Ø 积分 八进制整数
x,X 积分 十六进制整数
e,E 浮点 科学计数法中的小数
F 浮点 小数
约会时间 日期和时间转换字符的前缀
百分 文字百分比

如何格式化字符串

字符串的格式与数字的格式几乎相同,并且将使用许多相同的标志。 让我们开始看一个用几个参数格式化的字符串。

多个参数

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

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技能,请尝试我的Lynda.com视频培训课程。 它们涵盖了多种Java EE技术:

翻译自: https://www.javacodegeeks.com/2017/09/format-string-clarified.html

需求澄清

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值