引言
字符串的格式化相当于将字符串依照指定的格局进行toString(),个别有两种模式:
//应用指定的格局字符串和参数返回一个格式化字符串。 public static String format(String format, Object... args) { return new Formatter().format(format, args).toString(); }
//应用指定的语言环境、格局字符串和参数返回一个格式化字符串。public static String format(Locale l, String format, Object... args) { return new Formatter(l).format(format, args).toString(); }
数据转化符
数据类型 | 阐明 | 转化模式 |
---|
%s | 字符串类型 | "string" |
%c | 字符类型 | 'A' |
%b | 布尔类型 | true/false |
%o | 整数类型(八进制) | 111 |
%d | 整数类型(十进制) | 17 |
%x | 整数类型(十六进制) | 11 |
%f | 浮点类型(根本) | 66.66 |
%e | 指数类型 | 1.11e+5 |
%a | 浮点类型(十六进制) | FF.22 |
%h | 散列码 | 11 |
%% | 百分比类型 | 17% |
%n | 换行符 | |
%tx | 日期与工夫类型 | |
测试
public class Format01 { public static void main(String[] args) { System.out.println(String.format("字符串:%s", "String")); System.out.println(String.format("字符:%c", 'M')); System.out.println(String.format("布尔类型:%b", 'M'>'A')); System.out.println(String.format("八进制整数类型:%o", 17)); System.out.println(String.format("十进制整数类型:%d", 17)); System.out.println(String.format("十六进制整数类型:%x", 17)); System.out.println(String.format("根本浮点类型:%f", 99.1)); System.out.println(String.format("指数类型:%e", 100.111111111)); System.out.println(String.format("十六进制浮点类型:%a", 17.111111)); System.out.println(String.format("散列码:%h", 17)); System.out.println(String.format("百分比类型:17%%")); System.out.print(String.format("换行符:%n", 17)); }}
输入
字符串:String字符:M布尔类型:true八进制整数类型:21十进制整数类型:17十六进制整数类型:11根本浮点类型:99.100000指数类型:1.001111e+02十六进制浮点类型:0x1.11c71c53f39d2p4散列码:11百分比类型:17%换行符:
字符串的格式化
标记 | 阐明 | 示例 | 输入 |
---|
+ | 为负数增加符号 | ("负数:%+f",11.11)) | 负数:+11.110000 |
- | 左对齐 | ("左对齐:%-5d",11) | 左对齐:11 |
0 | 整数后面补0 | ("数字后面补0:%04d",11) | 数字后面补0:0011 |
, | 对数字分组 | ("按,对数字分组:%,d",111111111) | 按,对数字分组:111,111,111 |
空格 | 数字后面补空格 | ("空格:% 4d",11) | 空格: 11 |
( | 蕴含正数 | ("应用括号蕴含正数:%(f",-11.11) | 应用括号蕴含正数:(11.110000) |
# | 浮点数蕴含小数,八进制蕴含0,十六进制蕴含0x | | |
< | 格式化前一个转换符形容的参数 | ("格式化前形容的参数:%f转化后%<3.3f",111.1111111) | 格式化前形容的参数:111.111111转化后111.111 |
$ | 被格式化的参数索引 | ("被格式化的参数索引:%1$d,%2$s",11,"111.1111111") | 被格式化的参数索引:11,111.1111111 |
测试
public class formatString { public static void main(String[] args) { System.out.println(String.format("负数:%+f",11.11)); System.out.println(String.format("右对齐:%+10d",11)); System.out.println(String.format("左对齐:%-5d",11)); System.out.println(String.format("数字后面补0:%044d",11)); System.out.println(String.format("空格:% 4d",11)); System.out.println(String.format("按,对数字分组:%,d",111111111)); System.out.println(String.format("应用括号蕴含正数:%(f",-11.11)); System.out.println(String.format("浮点数蕴含小数点:%#f",11.1)); System.out.println(String.format("八进制蕴含0:%#o",11)); System.out.println(String.format("十六进制蕴含0x:%#x",11)); System.out.println(String.format("格式化前形容的参数:%f转化后%<3.3f",111.1111111)); System.out.println(String.format("被格式化的参数索引:%1$d,%2$s",11,"111.1111111")); }}
输入
负数:+11.110000右对齐: +11左对齐:11 数字后面补0:00000000000000000000000000000000000000000011空格: 11按,对数字分组:111,111,111应用括号蕴含正数:(11.110000)浮点数蕴含小数点:11.100000八进制蕴含0:013十六进制蕴含0x:0xb格式化前形容的参数:111.111111转化后111.111被格式化的参数索引:11,111.1111111
日期的格式化
转换符 | 阐明 | 示例 |
---|
c | 全副工夫日期 | 星期四 十二月 17 13:11:35 CST 2020 |
F | 年-月-日格局 | 2020-12-17 |
D | 月/日/年格局 | 12/17/20 |
r | HH:MM:SS PM格局(12时制) | 01:11:35 下午 |
T | HH:MM:SS格局(24时制) | 13:11:35 |
R | HH:MM格局(24时制) | 13:11 |
测试
public class formatDate { public static void main(String[] args) { Date date = new Date(); System.out.println(String.format("全副工夫日期:%tc",date)); System.out.println(String.format("年-月-日格局:%tF",date)); System.out.println(String.format("月/日/年格局:%tD",date)); System.out.println(String.format("HH:MM:SS PM格局(12时制):%tr",date)); System.out.println(String.format("HH:MM:SS格局(24时制):%tT",date)); System.out.println(String.format("HH:MM格局(24时制):%tR",date)); }}
输入
全副工夫日期:星期四 十二月 17 13:21:35 CST 2020年-月-日格局:2020-12-17月/日/年格局:12/17/20HH:MM:SS PM格局(12时制):01:21:35 下午HH:MM:SS格局(24时制):13:21:35HH:MM格局(24时制):13:21
工夫的格式化
转换符 | 阐明 | 示例 |
---|
H | 2位数字24时制的小时(有余2位后面补0) | 13 |
l | 2位数字12时制的小时 | 1 |
k | 2位数字24时制的小时 | 13 |
M | 2位数字的分钟 | 33 |
L | 3位数字的毫秒 | 745 |
S | 2位数字的秒 | 33 |
N | 9位数字的毫秒数 | 745000000 |
p | Locale.US,\"小写字母的上午或下午标记(英) | 下午 |
Z | 时区缩写字符串 | CST |
z | 绝对于GMT的RFC822时区的偏移量 | +0800 |
s | 1970-1-1 00:00:00 到当初所通过的秒数 | 1608183213 |
Q | 1970-1-1 00:00:00 到当初所通过的毫秒数 | 1608183213745 |
测试
public class formatTime { public static void main(String[] args) { Date date = new Date(); System.out.println(String.format("2位数字24时制的小时(有余2位后面补0):%tH", date)); System.out.println(String.format("2位数字12时制的小时:%tl", date)); System.out.println(String.format("2位数字24时制的小时:%tk", date)); System.out.println(String.format("2位数字的分钟:%tM", date)); System.out.println(String.format("3位数字的毫秒:%tL", date)); System.out.println(String.format("2位数字的秒:%tS", date)); System.out.println(String.format("9位数字的毫秒数:%tN", date)); System.out.println(String.format("时区缩写字符串:%tZ", date)); System.out.println(String.format("绝对于GMT的RFC822时区的偏移量:%tz", date)); System.out.println(String.format("Locale.US,\"小写字母的上午或下午标记(英):%tp", date)); System.out.println(String.format("1970-1-1 00:00:00 到当初所通过的秒数:%ts", date)); System.out.println(String.format("1970-1-1 00:00:00 到当初所通过的毫秒数:%tQ", date)); }}
输入
2位数字24时制的小时(有余2位后面补0):132位数字12时制的小时:12位数字24时制的小时:132位数字的分钟:333位数字的毫秒:7452位数字的秒:339位数字的毫秒数:745000000时区缩写字符串:CST绝对于GMT的RFC822时区的偏移量:+0800Locale.US,"小写字母的上午或下午标记(英):下午1970-1-1 00:00:00 到当初所通过的秒数:16081832131970-1-1 00:00:00 到当初所通过的毫秒数:1608183213745