需求澄清

用户友好的介绍

如果您不熟悉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:过去,现在和未来
  • 上下文和依赖注入 (CDI)
  • 企业Java Bean (EJB)
  • 什么是JAX-RS批注?
  • @Context注释用于什么?

学到更多

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

  • 带有JAX-RS 2.0的RESTful服务
  • 使用Java EE进行WebSocket编程
  • 使用Java EEJSON处理
  • 学习Java企业版

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

需求澄清

需求澄清_澄清字符串的格式!相关推荐

  1. python判断正负零_【译】格式字符串语法

    前言:本文由Python 3.5.2 Documentation部分章节翻译整理而来 1 >> Format String Syntax str.format()方法和Formatter类 ...

  2. mysql的时间在cmd的输入格式_获取“System.FormatException:输入字符串的格式不正确。”在日期时间对象插入到MySql数据库...

    我正在使用C#与Mvvm Light和Mysql数据库的应用程序.当我做一个插入到数据库与对象是一个DateTime对象,我收到以下错误的参数:获取"System.FormatExcepti ...

  3. (需求实战_进阶_02)SSM集成RabbitMQ 关键代码讲解、开发、测试

    接上一篇:(企业内部需求实战_进阶_01)SSM集成RabbitMQ 关键代码讲解.开发.测试 https://gblfy.blog.csdn.net/article/details/10419730 ...

  4. Oracle数据库:约束行限制where语句,判断条件,比较条件,字符串日期格式,in,like,escape,null语句

    Oracle数据库:约束行限制where语句,判断条件,比较条件,字符串日期格式,in,like,escape,null语句 2022找工作是学历.能力和运气的超强结合体,遇到寒冬,大厂不招人,可能很 ...

  5. java中支持mp3格式_可以播放mp3格式文件的机器,都遵守了什么协议,才能让mp3格式的文件可以:“一处保存,到处播放?...

    //题主修改了问题,第一段的立场就有点奇怪了 >_<.> //不是mp3格式去适应各种机器的,是各种机器按照mp3规范通过硬件或软件去解码mp3格式的文件,然后经过DAC(数字-&g ...

  6. 代码实现以下需求 (1)有如下字符串“If you want to change your fate I think you must come to learn java

    代码实现以下需求 (1)有如下字符串"If you want to change your fate I think you must come to the shool to learn ...

  7. DataGridView 中发生以下异常: System.Exception: 是 不是 Decimal 的有效值。 ---> System.FormatException: 输入字符串的格式不正确。

    System.FormatException: 输入字符串的格式不正确. 参考文章: (1)DataGridView 中发生以下异常: System.Exception: 是 不是 Decimal 的 ...

  8. Java学习笔记(七)--格式化字符串及格式输出

    一.格式化字符串 String 类的静态 format() 方法用于创建格式化的字符串. 1.format(String format, Object···args) 该方法使用指定的格式字符串和参数 ...

  9. 从索引 0 处开始,初始化字符串的格式不符合规范。

    貌似只有用Access数据库的时候才会遇到这样的问题 原因是连接语句写错啦.所以会报"从索引 0 处开始,初始化字符串的格式不符合规范."这个错误 如下asp.net C# 示例 ...

最新文章

  1. 5G将成开启物联网时代的金钥匙
  2. ssl证书(https) iis 配置安装
  3. Tomcat 8 安装和配置、优化
  4. 如何获取当前C#程序所有线程的调用栈信息 ?
  5. [蓝桥杯2019初赛]迷宫-bfs+存储路径
  6. mysql题目_MySQL练习题
  7. BitHacks--位操作技巧
  8. 顶点计划:辅导员与学生关系讨论
  9. 树莓派自启动配置端口映射及启动jar
  10. 统计学习方法学习笔记一
  11. 继承MongoDBRepository仓库的模糊查询
  12. 文华编程是c 语言吗,华中科技大学文华学院级软件工程c语言.docx
  13. 通信协议学习-485通信(1)
  14. java 绝对路径双斜线_路径分隔符:正斜线/、反斜线\、双反斜线\\的区别
  15. 《老梁四大名著情商课》笔记- 杨修之死:越有能力越得认怂
  16. 百度地图根据地理坐标转换经纬度
  17. pr导出视频在哪里?
  18. Anaconda4.10.3安装
  19. 计算机水平考试试题c,计算机水平考试-初级程序员下午试题模拟6
  20. matlab修改图片位深度_BMP位图32位转为24位深度

热门文章

  1. P4332-[SHOI2014]三叉神经树【LCT】
  2. nssl1476-联【线段树】
  3. 亿些模板【字符串+其他】
  4. 【2018.3.10】模拟赛之四-ssl2133 腾讯大战360【SPAF,图论,最短路径】
  5. P2685 [TJOI2012]桥(最短路+线段树)
  6. 【DP】奖励卡(jzoj 3937)
  7. codeforces gym-101755 D-Transfer Window 二分图匹配、递归
  8. L2-016 愿天下有情人都是失散多年的兄妹 CCCC
  9. 面试官问我:Redis 内存满了怎么办
  10. 写一个http服务器