2019独角兽企业重金招聘Python工程师标准>>>

JDK1.5开始String类中提供了一个非常有用的方法String.format(String format, Object ... args)

查看源码得知其实是调用了Java.util.Formatter.format(String, Object...)方法

public static String format(String format, Object ... args) {  return new Formatter().format(format, args).toString();
}  

String.format(String format, Object ... args) 这个方法最重要的的地方就是它的第一个参数String format,我们只要掌握了这个参数的用法也就掌握了String.format的用法

首先来看一个列子

String s2 = String.format("%1$tY-%1$tm-%1$te", new Date());
System.out.println(s2);  

这里会打印出什么内容?

先不急着去运行它,相信阅读到后面不用运行,你也会知道的.

查看JDK文档得知,String.format方法的第一个参数是有个公式可以套的

这里我们只要牢记这个公式就可以,下面说下每个颜色所代表的含义

argument_index: 可选,是一个十进制整数,用于表明参数在参数列表中的位置。第一个参数由 "1$" 引用,第二个参数由 "2$" 引用,依此类推。

flags: 可选,用来控制输出格式

width: 可选,是一个正整数,表示输出的最小长度

precision:可选,用来限定输出字符数

conversion:必须,用来表示如何格式化参数的字符

先看一个简单的列子:

System.out.println(String.format("我的名字叫%s", "小明")); // 打印:我的名字叫小明  

这里我们只用了%s这个简单的表达式,对比上面的公式,我们发现[argument_index$][flags][width][.precision]这些部分全部都省略掉了

只留下一个必须的conversion,在这里conversion就是"s",百分号%是固定不变的

[argument_index$]省略之后它会自动把"小明"这个值填入到%s中去

我再稍微改下列子:

String.format("我叫%s,她叫%s", "小明","小方"); // 我叫小明,她叫小方  

这里会按顺序分别把小明,小方填入到对应的%s中. 如果我们要把小方填在前面,小明填在后面,那该怎么做呢,[argument_index$]就派上用场了

String.format("我叫%2$s,她叫%1$s", "小明","小方"); // 我叫小方,她叫小明  

依然是百分号%开头,中间多了个2$,1$

conversion可以填s,那还有什么其它字母可以填呢,当然有的比如

o:结果被格式化为八进制整数

x:结果被格式化为十六进制

d:结果被格式化为十进制整数

System.out.println(String.format("%o", 8)); // 10
System.out.println(String.format("%x", 16)); // 10  

更多的conversion类别可以参考JDK文档java.util.Formatter类

至此,我们已经了解了argument_index$和conversion的用处,接下来我们了解flagwidth的用法

flag是用来控制输出格式的,比如左对齐,金额用逗号隔开等

width:表示最小宽度

先看个列子:

String.format("%1$,d", 12302562); // 12,302,562  

这里多出一个逗号",",它就是flag,用于金额千分位隔开,当然写成"%,d"也是可以的

再一个列子:

String.format("%1$08d", 123456);// 00123456

这里0就是flag,表示结果将用零来填充,8就是width,表示最少要8位,d是conversion

至于其它的flag可以查阅JDK文档

接下来说下[.precision]

这个单词翻译下是精度的意思,我们发现了前面有个小数点".",因此不难联想到这个是关于浮点数类型的

只有当传入的数据是浮点数时这个才有用,整数或者日期类型的数据都不能用

比如我想要四舍五入保留两位小数,那么我可以这么写:

String.format("%1$.2f", 12.12555);// 12.13  

这里f表示传入的数字是浮点型,如果传入的是整数,或者把f改成d都会抛出异常,JDK文档中有明确说明

对于浮点转换 'e'、'E' 和 'f',精度是小数点分隔符后的位数。如果转换是 'g' 或 'G',那么精度是舍入计算后所得数值的所有位数。如果转换是 'a' 或 'A',则不必指定精度。

对于字符、整数和日期/时间参数类型转换,以及百分比和行分隔符转换,精度是不适用的;如果提供精度,则会抛出异常。

到现在为止这套表达式公式已经基本讲完了,这套公式是针对于基本数据类型,和字符串的,如果是正对于时间类型的数据该怎么做呢,比如格式化日期

其实文档中已经给出说明了:

  • 用来表示日期和时间类型的格式说明符的语法如下

    %[argument_index$][flags][width]conversion

    可选的 argument_indexflags 和 width 的定义同上。

    所需的 conversion 是一个由两字符组成的序列。第一个字符是 't' 或 'T'。第二个字符表明所使用的格式。这些字符类似于但不完全等同于那些由 GNU date 和 POSIX strftime(3c) 定义的字符。

    需要注意的是conversion 是一个由两字符组成的序列。第一个字符是 't' 或 'T'。

    也就是说用conversion的时候首先必要写一个"t",然后在写其它conversion

    时间类型有它自己的一套conversion,我们简单的选择几个来说:

    'Y' 年份,被格式化为必要时带前导零的四位数(至少),例如,0092 等于格里高利历的 92 CE。
    'm' 月份,被格式化为必要时带前导零的两位数,即 01 - 13。
    'd' 一个月中的天数,被格式化为必要时带前导零两位数,即 01 - 31

    上面三个分别表示年月日

    如果我要显示年份,我就可以"%tY",显示月份我就可以写"%tm",记得一定要带上"t"

    那么本篇一开始提到的那串复杂的表达式现在看来是不是很简单呢:

    String s2 = String.format("%1$tY-%1$tm-%1$te", new Date());
    System.out.println(s2);    

    String.format()方法差不多讲完了,仔细看JDK文档也会慢慢了解的

    需要批量进行格式化时,考虑下DateFormat, MessageFormat, NumberFormat 把他们封装成一个静态工具类或许更好

    毕竟调用String.format()方法是会new一个Formatter对象,虽然有GC帮忙,但是平时编程的时候还是要考虑这些因素的

    尽量少的创建对象,节省资源

转载于:https://my.oschina.net/u/2331760/blog/880628

String.format()方法使用说明相关推荐

  1. String.Format()方法

    String.Format方法是我们在.Net应用开发时经常使用到的,它的灵活使用有时能够达到事半功倍的效果,下面我们就借用MSDN上的一个示例来向大家展示String.Format的各种用法. 该示 ...

  2. String.format()方法的使用

    转载自  java字符串格式化:String.format()方法的使用 常规类型的格式化 String类的format()方法用于创建格式化的字符串以及连接多个字符串对象.熟悉C语言的读者应该记得C ...

  3. String.format() 方法用法解说

    前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家.点击跳转到教程. String chargeFlowUrl = _AGENT_URL+ "?agentAcc ...

  4. Objective-C 字符串拼接函数 多个不同类型的参数拼接到一个字符串 类似于Java中 String.format()方法的原生API

    总目录 iOS开发笔记目录 从一无所知到入门 文章目录 需求 Screenshot Code Output 需求 我有多个参数(类型也许不同),需要拼接到一个字符串中. 在Java中有String.f ...

  5. java百分号的用法,Java String.format()方法中使用百分号'%'_栗子教程

    下面这个例子演示了如何在String.format方法中显示一个百分号. 像下面这样直接调用String.format("%d%", 100)来显示百分号,将会抛出java.uti ...

  6. String.format()方法详解

    String.format()方法详解 前言: String.format()作为文本处理工具,为我们提供强大而丰富的字符串格式化功能,这里根据查阅的资料做个学习笔记,整理成如下文章,供后续复习查阅. ...

  7. JAVA String.format 方法使用介绍

    在JDK1.5中,String类增加了静态方法format(String format, Objects... args),format(Local l ,String format, Objects ...

  8. JAVA String format 方法使用介绍

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 在JDK ...

  9. java字符串格式化:String.format()方法的使用

    String类的format()方法用于创建格式化的字符串以及连接多个字符串对象.熟悉C语言的读者应该记得C语言的sprintf()方法,两者有类似之处.format()方法有两种重载形式. l    ...

最新文章

  1. 数据库初学者_面向初学者的免费6小时数据科学课程
  2. NetDevOps — netmiko
  3. sample 算子_Spark----RDD及算子
  4. PHP常用正则:手机 邮箱 网址
  5. redis设置键的生存时间或过期时间
  6. JavaSE-21 字符编码简介
  7. 明明知道银行存款会贬值,为什么还有那么多人把钱放在银行?
  8. C++泛型编程实现哈希表(开散列法)
  9. 成功人士都是这样逼出来的
  10. mysql utf8转gbk cmd_utf8转成gbk
  11. php对pdf关键字定位,如何在PDF文件中快速查找关键字
  12. 微软超融合私有云测试02-测试架构描述
  13. 软件测试 vb,使用VB6.0进行自动化测试
  14. ES6新特性总结之解构赋值和字符串模板
  15. 12个优秀的 HTML5 网站设计案例欣赏
  16. 测试项目实战----RuoYi后台管理系统
  17. Shiro 完整教程及样例demo
  18. Atitit r2017 r4 doc list on home ntpc.docx 驱动器 D 中的卷是 p2soft 卷的序列号是 9AD0-D3C8 D:\ati ext\r2017
  19. 1分钟搞定 OneNote自己账号扩容到15G永久免费空间
  20. 洛谷 P1725 琪露诺

热门文章

  1. mysql命令行执行时不输出列名(字段名)
  2. 云计算五种定义辨析[摘]
  3. rails笔记 cache系统
  4. python弹幕代码_只需3 行代码就可以获取B站(弹幕、评论、用户)数据
  5. Node-RESTful
  6. poj1182 and 携程预赛2第一题 带权并查集
  7. 【Groovy】Groovy 方法调用 ( Groovy 构造函数中为成员赋值 | Groovy 函数的参数传递与键值对参数 | 完整代码示例 )
  8. 【Java 并发编程】线程指令重排序问题 ( 指令重排序规范 | volatile 关键字禁止指令重排序 )
  9. 【Java 并发编程】线程简介 ( 原子操作 | volatile 关键字使用场景 )
  10. 【错误记录】Android 应用运行报错 ( You need to use a Theme.AppCompat theme (or descendant) with this activity. )