String.format
String的format 方法我们都很熟悉,但是它能干什么?在我的印象中可以格式化数字,但是它很强大,可以当作占位符,格式化字符串和数字,可以格式化日期。
思考
如果用户对象中要写一个自我介绍的方法,你会怎么写?通常的写方法就是直接用变量和字符串拼接起来,但是也可以用String.format 方法,用占位符替代变量,只用一个字符串就可以拼好。
字符串拼接如下:
name +"来自"+adress+",年龄" +age+",性别"+sex;//字符串是不可改变的,这里已经声明了3个字符串,整体拼接好至少要4个字符串变量,并且字符串存储在方法区的字符常量池中。
format 拼接如下:
String.format("%s来自%s,年龄 %d,性别 %s", adress, age, sex);//代码上是出现一个字符
1.占位符类型使用
占位符解释
占位符 | 解释 | 示例 |
---|---|---|
%s | 字符串 | “你好” |
%c | 字符类型 | ‘g’ |
%b | 布尔类型 | true |
%d | 整数类型(十进制) | 66 |
%x | 整数类型(十六进制) | FF |
%o | 整数类型(八进制) | 77 |
%f | 浮点类型 | 6.6 |
%a | 十六进制浮点类型 | FF.35AE |
%e | 指数类型 | 9.38e+5 |
%g | 通用浮点类型(f和e类型中较短的) | |
%h | 散列码 | |
%n | 换行符 | |
%tx | 日期与时间类型 |
使用方法:用相应的类型的占位符,把相应的参数放相应的参数上。
System.out.println(String.format("Hell %s","字符串"));
System.out.println(String.format("字符 %c",'A'));
System.out.println(String.format("布尔 %b",false));
System.out.println(String.format("十进制 %d",10));
System.out.println(String.format("十六进制 %x",10));
System.out.println(String.format("八进制 %o",10));
System.out.println(String.format("浮点 %f",2.2));
System.out.println(String.format("十六进制浮点 %a",10.8));
System.out.println(String.format("指数类型 %e",10e+5));
System.out.println(String.format("通用浮点类型 %g",10.8));
System.out.println(String.format("散列码 %h",'K'));
System.out.println(String.format("换行符 %n 你好"));
运行结果如下:(有的起到是占位符的作用,有的是转换的作用。)
Hell 字符串
字符 A
布尔 false
十进制 10
十六进制 a
八进制 12
浮点 2.200000
十六进制浮点 0x1.599999999999ap3
指数类型 1.000000e+06
通用浮点类型 10.8000
散列码 4b
换行符
你好
2.常用标识
标识 | 解释 |
---|---|
+ | 为正数或负数添加符号(负数已经有符号,实际就是给正数添加+符号) |
0 | 在数字位数不够的地方补上0(针对整数) |
空格 | 在位数不够的地方补上空格 |
, | 对数字分组,三位一隔,只可以用于十进制(针对整数) |
( | 使用括号将去掉负号的负数包含进来(针对负数) |
# | 让十六进制的数字加上OX,八进制的数字加上o;辅助%x和%o的使用 ,相当于一种对数字进制的补充说明提示 |
< | 格式化前一个转换符锁描述的参数 |
- | 左对齐,不够位数的地方补上空格 |
用法样例:
System.out.println(String.format("数字正负:%+d %d %+d %d",6,6,-6,-6));
System.out.println(String.format("数字位数不够上0:%05d ",6));
System.out.println(String.format("数字位数不够上0:%02f ",6.1));
System.out.println(String.format(",数字分组:%,d ",1000000));
System.out.println(String.format("括号用法:%(d",-8888));
System.out.println(String.format("#括号用法(十六进制):%#x",12));
//"%<3.1f"作用的对象是前一个"%f"对应的参数
System.out.println(String.format("<括号用法:%f %<3.1f",3.1415,3.5));
System.out.println(String.format("左对齐:%-19d",8888));
执行结果:
数字正负:+6 6 -6 -6
数字位数不够上0:00006
数字位数不够上0:6.10
,数字分组:1,000,000
括号用法:(8888)
#括号用法(十六进制):0xc
<括号用法:3.141500 3.1
左对齐:8888
3.格式化日期
标识 | 解释 |
---|---|
c | 包括全部日期和时间信息 |
F | "年-月-日"格式 |
D | '月/日/年’格式 |
r | “HH:MM:SS PM”格式(12时制) |
T | “HH:MM:SS”格式(24时制) |
R | “HH:MM”格式(24时制) |
使用样例:
System.out.println(String.format("全部日期和时间信息:%tc",new Date()));
System.out.println(String.format("年-月-日格式:%tF",new Date()));
System.out.println(String.format("月/日/年格式:%tD",new Date()));
System.out.println(String.format("HH:MM:SS PM格式(12时制):%tr",new Date()));
System.out.println(String.format("HH:MM:SS格式(24时制):%tT",new Date()));
System.out.println(String.format("HH:MM格式(24时制):%tR",new Date()));
输出结果:
全部日期和时间信息:星期四 六月 29 18:28:59 CST 2023
年-月-日格式:2023-06-29
月/日/年格式:06/29/23
HH:MM:SS PM格式(12时制):06:28:59 下午
HH:MM:SS格式(24时制):18:28:59
HH:MM格式(24时制):18:2