格式化字符串
[toc]
淘气的页数
大牛:“小鸟,发什么呆啊?”
小鸟:“牛哥,我这里要写一个显示当前位于第几页的效果:< 第[1]页 >
,这里的页数是可变的”
大牛:“嗯,对啊!有什么问题?”
小鸟:“我这里非常的疑惑,如果我用字符串拼接(+
连接),我就会无形中多创建好多个String对象,有点浪费内存。”
int n = 1;String string = "< 第[" + n + "+]页 >";
小鸟:“如果我使用StringBuffer的话,是能解决这个问题,但是我感觉写的太多了,代码不够简洁。”
int n = 1;StringBuffer stringBuffer = new StringBuffer();stringBuffer.append("< 第[");stringBuffer.append(n);stringBuffer.append("+]页 >");
小鸟:“我记得以前学c语言的时候,有一个叫格式化字符串的东东,要是这里也能这样就好了。”
大牛:“有啊!java里面也是有的,下面我就给你详细的讲解一下。”
转换符
使用
String.format("姓名:%s", "张三")
System.out.printf("姓名:%s", "张三");
大牛:“我们要显示不同的数据类型,自然要有不同的表现形式,不然计算机会迷糊的,这里的不同的表现形式我们就叫做转换符
,转换符的种类如下:”
转换符 | 说明 | eg | 结果 |
---|---|---|---|
%s | 字符串类型 | String.format("姓名:%s", "张三") | 姓名:张三 |
%c | 字符类型 | String.format("a的大写字母是:%c",'A') | a的大写字母是:A |
%b | 布尔类型 | String.format("2>3:%b",2>3); | 2>3:false |
%d | 整数类型(十进制) | String.format("第%d页",1) | 第1页 |
%x | 整数类型(十六进制) | String.format("16的16进制数是:%x",16) | 16的16进制数是:10 |
%f | 浮点类型 | String.format("100的85折是:%f",100*0.85) | 100的85折是:85.000000 |
%a | 浮点类型(十六进制) | String.format("100的85折的16进制是:%a",100*0.85) | 100的85折的16进制是:0x1.54p6 |
%e | 指数类型 | ||
%g | 通用浮点类型 | ||
%h | 散列码 | ||
%n | 换行符 | ||
%tx | x代表不同的日期与时间转换符 |
- x
转换符 | 说明 | eg | 结果 |
---|---|---|---|
c | 包括全部日期和时间信息 | String.format("包括全部日期和时间信息:%tc",new Date()) | 包括全部日期和时间信息:星期三 四月 27 15:24:29 CST 2016 |
F | 年-月-日 | String.format("年-月-日:%tF",new Date()) | 年-月-日:2016-04-27 |
D | 月/日/年 | String.format("月/日/年:%tD",new Date()) | 月/日/年:04/27/16 |
r | HH:MM:SS PM | String.format("HH:MM:SS PM:%tr",new Date()) | HH:MM:SS PM:03:34:41 下午 |
T | HH:MM:SS | String.format("HH:MM:SS:%tT",new Date()) | HH:MM:SS:15:36:12 |
R | HH:MM | String.format("HH:MM:%tR",new Date()) | HH:MM:15:36 |
b | 月份 | String.format(Locale.US,"英文月份简称:%tb",new Date()) | 英文月份简称:Apr |
String.format("本地月份:%tb",new Date()) | 本地月份:四月 | ||
B | 月份 | String.format(Locale.US,"英文月份全称:%tB",new Date()) | 英文月份全称:April |
String.format("本地月份:%tB",new Date()) | 本地月份:四月 | ||
a | 星期 | String.format(Locale.US,"英文星期简称:%ta",new Date()) | 英文星期简称:Wed |
String.format("本地星期:%ta",new Date()) | 本地星期:星期三 | ||
A | 星期 | String.format(Locale.US,"英文星期全称:%tA",new Date()) | 英文星期简称:Wednesday |
String.format("本地星期:%tA",new Date()) | 本地星期:星期三 | ||
j | 年的第几天 | String.format("年的第几天:%tj",new Date()) | 年的第几天:118 |
m | 两位数字的月份(不足两位补0) | String.format("两位数字的月份(不足两位补0):%tm",new Date()) | 两位数字的月份(不足两位补0):04 |
d | 两位数字的日(不足两位前面补0) | String.format("两位数字的日(不足两位前面补0):%td",new Date()) | 两位数字的日(不足两位前面补0):27 |
e | 月份的日(前面不补0) | String.format("两位数字的日(不足两位前面补0):%te",new Date()) | 两位数字的日(不足两位前面补0):7 |
标志符
通常与转换符结合使用,位于
%
格式:%[标志符][s|c|b|d...]