Java 字符串格式化 String.format()

本文将介绍Java 字符串格式化 String.format() 函数。

在 Java 中,String 类提供的 format() 方法用于创建格式化的字符串以及连接多个字符串对象。学过 C 语言的同学应该记得 C 语言的 sprintf() 方法,两者有类似之处。format() 方法有两种重载形式。

  • format(String format, Object... args) 新字符串使用本地语言环境,制定字符串格式和参数生成格式化的新字符串。

  • format(Locale locale, String format, Object... args) 使用指定的语言环境,制定字符串格式和参数生成格式化的字符串。

显示不同转换符实现不同数据类型到字符串的转换,如下表:

转  换  符

说    明 

示    例

%s

字符串类型

"mingrisoft"

%c

字符类型

'm'

%b

布尔类型

true

%d

整数类型(十进制)

99

%x

整数类型(十六进制)

FF

%o

整数类型(八进制)

77

%f

浮点类型

99.99

%a

十六进制浮点类型

FF.35AE

%e

指数类型

9.38e+5

%g

通用浮点类型(f和e类型中较短的)


%h

散列码


%%

百分比类型

%n

换行符


%tx

日期与时间类型(x代表不同的日期与时间转换符


实例:演示上面各种转换符的用法,代码如下:

String str = null;
str = String.format("字符串类型:%s,字符类型:%c,布尔类型:%b", "hello", 'A', true);
System.out.println(str);

str = String.format("十进制:%d,十六进制:%x,八进制:%o", 100, 100, 100);
System.out.println(str);

str = String.format("浮点数类型:%f,十六进制浮点类型:%a,指数类型:%e", 4675.5f, 4675.5f, 4675.5f);
System.out.println(str);

str = String.format("散列码:%h", new Object());
System.out.println(str);

str = String.format("百分比类型:%d%%  %n换行符", 45);
System.out.println(str);

str = String.format("日期/时间:%tD", new Date());
System.out.println(str);

运行结果:

字符串类型:hello,字符类型:A,布尔类型:true
十进制:100,十六进制:64,八进制:144
浮点数类型:4675.500000,十六进制浮点类型:0x1.2438p12,指数类型:4.675500e+03
散列码:244038d0
百分比类型:45%  
换行符
日期/时间:03/25/21

日期/时间转换

前面介绍了 %tx 转换符的用法,下面将列出所有可用的 x 符号。以下转换字符用来格式化时间:

  • 'H'  24 小时制的小时,被格式化为必要时带前导零的两位数,即 00 - 23。  

  • 'I'  12 小时制的小时,被格式化为必要时带前导零的两位数,即 01 - 12。  

  • 'k'  24 小时制的小时,即 0 - 23。  

  • 'l'  12 小时制的小时,即 1 - 12。  

  • 'M'  小时中的分钟,被格式化为必要时带前导零的两位数,即 00 - 59。  

  • 'S'  分钟中的秒,被格式化为必要时带前导零的两位数,即 00 - 60 ("60" 是支持闰秒所需的一个特殊值)。  

  • 'L'  秒中的毫秒,被格式化为必要时带前导零的三位数,即 000 - 999。  

  • 'N'  秒中的毫微秒,被格式化为必要时带前导零的九位数,即 000000000 - 999999999。  

  • 'p'  特定于语言环境的 上午或下午 标记以小写形式表示,例如 "am" 或 "pm"。使用转换前缀 'T' 可以强行将此输出转换为大写形式。  

  • 'z'  相对于 GMT 的 RFC 822 格式的数字时区偏移量,例如 -0800。  

  • 'Z'  表示时区缩写形式的字符串。Formatter 的语言环境将取代参数的语言环境(如果有)。  

  • 's'  自协调世界时 (UTC) 1970 年 1 月 1 日 00:00:00 至现在所经过的秒数,即 Long.MIN_VALUE/1000 与 Long.MAX_VALUE/1000 之间的差值。  

  • 'Q'  自协调世界时 (UTC) 1970 年 1 月 1 日 00:00:00 至现在所经过的毫秒数,即 Long.MIN_VALUE 与 Long.MAX_VALUE 之间的差值。  

实例:演示怎样格式化日期字段,代码如下:

String str = null;
Date date = new Date();

str = String.format("24小时制的小时:%tH", date);
System.out.println(str);

str = String.format("12 小时制的小时:%tI", date);
System.out.println(str);

str = String.format("小时中的分钟:%tM", date);
System.out.println(str);

str = String.format("分钟中的秒:%tS", date);
System.out.println(str);

str = String.format("秒中的毫秒:%tL", date);
System.out.println(str);

str = String.format("秒中的毫微秒:%tN", date);
System.out.println(str);

输出结果:

24小时制的小时:22
12 小时制的小时:10
小时中的分钟:59
分钟中的秒:57
秒中的毫秒:589
秒中的毫微秒:589000000

以下转换字符用来格式化日期:

  • 'B'  特定于语言环境的月份全称,例如 "January" 和 "February"。  

  • 'b'  特定于语言环境的月份简称,例如 "Jan" 和 "Feb"。  

  • 'h'  与 'b' 相同。  

  • 'A'  特定于语言环境的星期几全称,例如 "Sunday" 和 "Monday"  

  • 'a'  特定于语言环境的星期几简称,例如 "Sun" 和 "Mon"  

  • 'C'  除以 100 的四位数表示的年份,被格式化为必要时带前导零的两位数,即 00 - 99  

  • 'Y'  年份,被格式化为必要时带前导零的四位数(至少),例如,0092 等于格里高利历的 92 CE。  

  • 'y'  年份的最后两位数,被格式化为必要时带前导零的两位数,即 00 - 99。  

  • 'j'  一年中的天数,被格式化为必要时带前导零的三位数,例如,对于格里高利历是 001 - 366。  

  • 'm'  月份,被格式化为必要时带前导零的两位数,即 01 - 13。  

  • 'd'  一个月中的天数,被格式化为必要时带前导零两位数,即 01 - 31  

  • 'e'  一个月中的天数,被格式化为两位数,即 1 - 31。  

以下转换字符用于格式化常见的日期/时间组合:

  • 'R'  24 小时制的时间,被格式化为 "%tH:%tM"  

  • 'T'  24 小时制的时间,被格式化为 "%tH:%tM:%tS"。  

  • 'r'  12 小时制的时间,被格式化为 "%tI:%tM:%tS %Tp"。上午或下午标记 ('%Tp') 的位置可能与语言环境有关。  

  • 'D'  日期,被格式化为 "%tm/%td/%ty"。  

  • 'F'  ISO 8601 格式的完整日期,被格式化为 "%tY-%tm-%td"。  

  • 'c'  日期和时间,被格式化为 "%ta %tb %td %tT %tZ %tY",例如 "Sun Jul 20 16:17:00 EDT 1969"。  

搭配转换符的标志:

标    志

说    明

示    例

结    果

+

为正数或者负数添加符号

("%+d",15)

+15

左对齐

("%-5d",15)

|15   |

0

数字前面补0

("%04d", 99)

0099

空格

在整数之前添加指定数量的空格

("% 4d", 99)

|  99|

,

以“,”对数字分组

("%,f", 9999.99)

9,999.990000

(

使用括号包含负数

("%(f", -99.99)

(99.990000)

#

如果是浮点数则包含小数点,如果是16进制或8进制则添加0x或0

("%#x", 99)

("%#o", 99)

0x63

0143

格式化前一个转换符所描述的参数

("%f和%<3.2f", 99.45)

99.450000和99.45

$

被格式化的参数索引

("%1$d,%2$s", 99,"abc")

99,abc

实例:演示上面标志的用法,源码如下:

String str = null;
//$使用
str=String.format("格式参数$的使用:%1$d,%2$s", 99,"abc");
System.out.println(str);

//+使用
System.out.printf("显示正负数的符号:%+d与%d%n", 99,-99);

//补O使用
System.out.printf("最牛的编号是:%03d%n", 7);

//空格使用
System.out.printf("Tab键的效果是:% 8d%n", 7);

//.使用
System.out.printf("整数分组的效果是:%,d%n", 9989997);

//空格和小数点后面个数
System.out.printf("一本书的价格是:% 50.5f元%n", 49.8);

输出结果:

格式参数$的使用:99,abc
显示正负数的符号:+99与-99
最牛的编号是:007
Tab键的效果是:       7
整数分组的效果是:9,989,997
一本书的价格是:                                          49.80000元


我们愈是学习,愈觉得自己的贫乏。 —— 雪莱
0 不喜欢
说说我的看法 -
全部评论(
没有评论
关于
本网站专注于 Java、数据库(MySQL、Oracle)、Linux、软件架构及大数据等多领域技术知识分享。涵盖丰富的原创与精选技术文章,助力技术传播与交流。无论是技术新手渴望入门,还是资深开发者寻求进阶,这里都能为您提供深度见解与实用经验,让复杂编码变得轻松易懂,携手共赴技术提升新高度。如有侵权,请来信告知:hxstrive@outlook.com
公众号