record对象拼成字符串 1.+号拼接 2.Stringformat格式化输出
String类的format()方法用于创建格式化的字符串以及连接多个字符串对象。
format()方法有两种重载形式:
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();
}
在这个方法中我们可以定义字符串模板,然后使用类似填空的方式将模板格式化成我们想要的结果字符串:
String java = String.format("hello %s", "world");
得到的结果就是hello world,我们可以把第一个参数当做模板, %s当做填空题,后边的可变参数当做答案
2、常用的转换符
当然不同数据类型需要不同转换符完成字符串的转换,以下是不同类型的转化符列表:
转换符 | 详细说明 | 示例 |
---|---|---|
%s | 字符串类型 | “喜欢请收藏” |
%c | 字符类型 | ‘m’ |
%b | 布尔类型 | true |
%d | 整数类型(十进制) | 88 |
%x | 整数类型(十六进制) | FF |
%o | 整数类型(八进制) | 77 |
%f | 浮点类型 | 8.888 |
%a | 十六进制浮点类型 | FF.35AE |
%e | 指数类型 | 9.38e+5 |
%n | 换行符 | |
%tx | 日期与时间类型(x代表不同的日期与时间转换符) | 后边详细说 |
System.out.printf("过年了,%s今年%d岁了,今天收了%f元的压岁钱!",
"小明",5,88.88);
结果:
过年了,小明今年5岁了,今天收了88.880000元的压岁钱!
3、特殊符号
接下来我们看几个特殊字符的常用搭配,可以实现一些高级功能:
标志 | 说明 | 示例 | 结果 |
---|---|---|---|
+ | 为正数或者负数添加符号,因为一般整数不会主动加符号 | (“%+d”,15) | +15 |
0 | 数字前面补0,用于对齐 | (“%04d”, 99) | 0099 |
空格 | 在整数之前添加指定数量的空格 | (“%4d”, 99) | 99 |
, | 以“,”对数字分组(常用显示金额) | (“%,f”, 9999.99) | 9,999.990000 |
( | 使用括号包含负数 | (“%(f”, -99.99) | (99.990000) |
System.out.printf("过年了,%s今年%03d岁了,今天收了%,f元的压岁钱!",
"小明",5,8888.88);
结果
过年了,小明今年005岁了,今天收了8,888.880000元的压岁钱!
默认情况下,我们的可变参数是安装顺序依次替换,但是我想重复利用可变参数那该怎么处理呢?
我们可以采用 在转换符中加数字$完成匹配:
System.out.printf("%1$s %1$s %1$s","小明");
控制台显示内容: 小明 小明 小明
4、日期处理
第一个例子中有说到 %tx x代表日期转换符 我也顺便列举下日期转换符
标志 | 说明 | 示例 |
---|---|---|
c | 包括全部日期和时间信息 | 周四 10月 21 14:52:10 GMT+08:00 2021 |
F | “年-月-日”格式 | 2021-10-21 |
D | “月/日/年”格式 | 10/21/21 |
r | “HH:MM:SS PM”格式(12时制) | 02:53:20 下午 |
T | “HH:MM:SS”格式(24时制) | 14:53:39 |
R | “HH:MM”格式(24时制) | 14:53 |
b | 月份本地化 | 10月 |
y | 两位的年 | 21 |
Y | 四位的年 | 2021 |
m | 月 | 10 |
d | 日 | 21 |
H | 24小时制的时 | 14 |
l | 12小时制的时 | 2 |
M | 分 | 57 |
S | 秒 | 46 |
s | 秒为单位的时间戳 | 1634799527 |
p | 上午还是下午 | 下午 |
我们可以使用以下三个类去进行格式化,其中可能存在不支持的情况,比如LocalDateTime不支持c:
System.out.printf("%tc",new Date());
System.out.printf("%tc",ZonedDateTime.now());
System.out.printf("%tF",LocalDateTime.now());
此时我们使用debug查看,默认情况下的fomat,我们不妨来读一读:
10月 21, 2021 2:23:42 下午 com.itszt.entity.LoggerTest testLogParent
警告: warning