快速入门介绍Java中强大的String.format()

前言

从 Java 5.0 开始,String 类新增了一个强大的字符串格式化方法 format()。这个方法到现在用的人还是不多,实在是一种浪费。本文带你快速过一遍这个方法的功能,将来你要用到格式化文本的时候,可能就不需要再借用第三方类库或自己去实现了。

首先看一个简单例子:

String formatted = String.format("%s今年%d岁。", "小李", 30); // "小李今年30岁。"

不用我多解释,你也可以看出:

  • 这个方法第一个参数是格式串,后面的参数都是格式串的参数,用于替换格式串中的占位符。
  • 占位符以 "%x" 的形式表示,不同的参数类型要用不同的字母。后面会具体介绍。
  • String.format() 返回值类型为字符串,也就是格式化的结果。

一、占位符类型

占位符 "%" 后面的字母决定了其接受的实际参数的类型。占位符类型有下面几种:

字母 适用参数类型 说明
%a 浮点数 以16进制输出浮点数
%b / %B 任意值 如果参数为 null 则输出 false,否则输出 true
%c / %C 字符或整数 输出对应的 Unicode 字符
%d 整数 对整数进行格式化输出
%e / %E 浮点数 以科学记数法输出浮点数
%f 浮点数 对浮点数进行格式化输出
%g / %G 浮点数 以条件来决定是否以科学记数法方式输出浮点数
%h / %H 任意值 以 16 进制输出参数的 hashCode() 返回值
%o 整数 以8进制输出整数
%s / %S 字符串 对字符串进行格式化输出
%t 日期时间 对日期时间进行格式化输出
%x / %X 整数 以16进制输出整数
%n 换行符
%% 百分号本身

大写字母表示输出的字母都为大写。

我们平常用的最多的就是 %s、%d 和 %f,偶尔会用到 %t。本文篇幅有限,仅介绍这四种,剩下的请自行阅读 API 文档。

二、字符串和整数格式化

这里直接给出例子来说明:

// 补齐空格并右对齐:
String.format("%10s, world", "Hello");  // 输出 "  Hello, world"
String.format("%8d", 123);     // 输出 "  123"

// 补齐空格并左对齐:
String.format("%-10s, world", "Hello"); // 输出 "Hello  , world"
String.format("%-8d", 123);    // 输出 "123  "

// 补齐 0 并对齐(仅对数字有效)
String.format("%08d", 123);    // 输出 "123  "
String.format("%-08d", 123);    // 错误!不允许在右边补齐 0

// 输出最多N个字符
String.format("%.5s", "Hello, world");  // 输出 "Hello"
String.format("%.5s...", "Hello, world"); // 输出 "Hello..."
String.format("%10.5s...", "Hello, world"); // 输出 "  Hello..."

// 输出逗号分隔数字
String.format("%,d", 1234567);    // 输出 "1,234,567"

三、日期格式化

这个就稍微复杂点,但如果你要在字符串中对文本数字和日期进行混排的话,只调一个方法应该比结合 DateFormat 和 NumberFormat 一起用要方便点。

首先补充一个知识,就是占位符可以指定某个位置的参数,格式为 %n$。例如 %2$d 表示第二个整形参数。注意这里的 n 是 1 开始而不是 0 开始。

格式化日期的时候,需要多个占位符指向同一个参数(以避免同一个参数重复几遍),同时因为 "t" 表示日期时间,所以完整的格式为 %n$tX,其中 X 表示取时间中的哪一部分。X 的可选值例如:

Y=年;m=月;d=日;H=时;M=分;S=秒;L=毫秒;A=星期几(名称);B=月份名称;

还有其他的字母,具体请参考 API 文档。下面是一个例子:

// 输出格式为 “Now is   15:04:52, 星期日”
// 注意 "%1$10tH" 中的 10 同样表示空格补齐 10 位并右对齐
String.format("Now is %1$10tH:%1$tM:%1$tS, %1$tA", new Date())

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对我们的支持。

您可能感兴趣的文章:

  • String.Format大全(C# Java)
  • JAVA字符串格式化-String.format()的使用
  • Java中String.format的使用方法总结
(0)

相关推荐

  • Java中String.format的使用方法总结

    Java中String.format的用法总结 1.对整数进行格式化:%[index$][标识][最小宽度]转换方式 我们可以看到,格式化字符串由4部分组成,其中%[index$]的含义我们上面已经讲过,[最小宽度]的含义也很好理解,就是最终该整数转化的字符串最少包含多少位数字.我们来看看剩下2个部分的含义吧: 标识: '-' 在最小宽度内左对齐,不可以与"用0填充"同时使用 '#' 只适用于8进制和16进制,8进制时在结果前面增加一个0,16进制时在结果前面增加0x '+' 结果总是

  • JAVA字符串格式化-String.format()的使用

    本篇介绍JAVA字符串格式化-String.format()的使用,具体如下: 常规类型的格式化 String类的format()方法用于创建格式化的字符串以及连接多个字符串对象.熟悉C语言的同学应该记得C语言的sprintf()方法,两者有类似之处.format()方法有两种重载形式. format(String format, Object... args) 新字符串使用本地语言环境,制定字符串格式和参数生成格式化的新字符串. format(Locale locale, String for

  • String.Format大全(C# Java)

    c#string.format 字符串的数字格式 stringstr1 =string.Format("{0:N1}",56789); //result: 56,789.0 stringstr2 =string.Format("{0:N2}",56789); //result: 56,789.00 stringstr3 =string.Format("{0:N3}",56789); //result: 56,789.000 stringstr8

  • 快速入门介绍Java中强大的String.format()

    前言 从 Java 5.0 开始,String 类新增了一个强大的字符串格式化方法 format().这个方法到现在用的人还是不多,实在是一种浪费.本文带你快速过一遍这个方法的功能,将来你要用到格式化文本的时候,可能就不需要再借用第三方类库或自己去实现了. 首先看一个简单例子: String formatted = String.format("%s今年%d岁.", "小李", 30); // "小李今年30岁." 不用我多解释,你也可以看出:

  • Java中区别.toString() ,(String),valueOf()方法

    在java项目的实际开发和应用中,常常需要用到将对象转为String这一基本功能.本文将对常用的转换方法进行一个总结.常用的方法有Object.toString(),(String)要转换的对象,String.valueOf(Object)等.下面对这些方法一一进行分析. 方法1:采用 Object.toString()方法请看下面的例子: Object object = getObject(); System.out.println(object.toString()); 在这种使用方法中,因

  • Java中byte[]、String、Hex字符串等转换的方法

    代码如下所示: /*输入一个byte和byte[]合并为byte[]*/ public byte[] byteMerger(byte byte_1, byte[] byte_2) { byte[] byte_3 = new byte[1 + byte_2.length]; byte_3[0] = byte_1; System.arraycopy(byte_2, 0, byte_3, 1, byte_2.length); return byte_3; } /*输入一个byte[]和byte[]合并

  • 简单介绍java中equals以及==的用法

    简单介绍 equals方法是java.lang.Object类的方法有两种用法说明: 一.对于字符串变量来说,使用"=="和"equals()"方法比较字符串时,其比较方法不同. 1."=="比较两个变量本身的值,即两个对象在内存中的首地址.(java中,对象的首地址是它在内存中存放的起始地址,它后面的地址是用来存放它所包含的各个属性的地址,所以内存中会用多个内存块来存放对象的各个参数,而通过这个首地址就可以找到该对象,进而可以找到该对象的各个属

  • Java中toString()、String.valueOf、(String)强转区别

    目录 一.前言 二.代码实例 1.基本类型 2.封装类型 3.null值问题 三.源码分析 1.toString() 2.String.valueOf() 四.总结 一.前言 相信大家在日常开发中这三种方法用到的应该很多,尤其是前两种,经常在开发的时候,随心所欲,想用哪个用哪个,既然存在,那就应该有它存在的道理,那么什么情况下用哪个呢? 二.代码实例 1.基本类型 (1)基本类型没有toString()方法 (2)推荐使用 (3)无法强转 (String)是标准的类型转换,将Object类型转为

  • 关于Java中byte[] 和 String互相转换问题

    通过用例学习Java中的byte数组和String互相转换,这种转换可能在很多情况需要,比如IO操作,生成加密hash码等等. 除非觉得必要,否则不要将它们互相转换,他们分别代表了不同的数据,专门服务于不同的目的,通常String代表文本字符串,byte数组针对二进制数据 通过String类将String转换成byte[]或者byte[]转换成String 用String.getBytes()方法将字符串转换为byte数组,通过String构造函数将byte数组转换成String 注意:这种方式

  • Java中HashMap与String字符串互转的问题解决

    目录 背景: 原因: 背景: 当我们有需求将HashMap转为Json格式的String时,切记不要使用HashMap的toString()方法,需要使用FastJson/Gson将HashMap转为String.如果使用toString()方法进行转换时,是无法将字符串再转为HashMap的.它只会出现序列化报错: demo代码: HashMap<String, String> dataMap = new HashMap<>(4); dataMap.put("key1&

  • 详细介绍Java中的各种锁

    一.一张图了解21种锁 二.乐观锁 应用 CAS 思想 一种乐观思想,假定当前环境是读多写少,遇到并发写的概率比较低,读数据时认为别的线程不会正在进行修改 实现 写数据时,判断当前 与期望值是否相同,如果相同则进行更新(更新期间加锁,保证是原子性的) 三.悲观锁 应用 synchronized.vector.hashtable 思想: 一种悲观思想 ** ,即认为写多读少,遇到并发写的可能性高 实现 每次读写数据都会认为其他线程会修改,所以每次读写数据时都会上锁 缺点 他线程想要读写这个数据时,

  • Java中拼接字符串String的N种方法总结

    目录 1.前言 2.问题复现 3.使用+运算符 4.使用String.concat() 5.使用StringBuilder 6.使用StringJoiner类(Java8+) 7.使用Streams.filter(Java8+) 8.总结 1. 前言 Java 提供了拼接 String 字符串的多种方式,不过有时候如果我们不注意 null 字符串的话,可能会把 null 拼接到结果当中,很明显这不是我们想要的. 在这篇文章中,将介绍一些在拼接 String 时避免 null 值的几种方式. 2.

  • Java中Date与String相互转换的方法

    我们在注册网站的时候,往往需要填写个人信息,如姓名,年龄,出生日期等,在页面上的出生日期的值传递到后台的时候是一个字符串,而我们存入数据库的时候确需要一个日期类型,反过来,在页面上显示的时候,需要从数据库获取出生日期,此时该类型为日期类型,然后需要将该日期类型转为字符串显示在页面上,Java的API中为我们提供了日期与字符串相互转运的类DateForamt.DateForamt是一个抽象类,所以平时使用的是它的子类SimpleDateFormat.SimpleDateFormat有4个构造函数,

随机推荐