本文已参与「新人创作礼」活动,一起开启掘金创作之路。
使用 replace 函数动态填充字符串
String str="Hello {0},我是 {1},今年{2}岁";
str = str.replace("{0}", "R先生");
str = str.replace("{1}", "Y先生");
str = str.replace("{2}", "99");
System.out.println(str);
使用 String.format() 占位符替换
作用:使用指定的格式字符串和参数返回一个格式化字符串。
String str=String.format("Hello %s,我是 %s,今年 %s 岁", "CSDN","小猪","12");
System.out.println(str);
String.format 作为文本处理工具,为我们提供强大而丰富的字符串格式化功能,为了不止步于简单调用 String.format("Hello %s", "R先生");
String.format 使用
占位符
占位符格式:
%[index$][标识]*[最小宽度][.精度]转换符
针对不同数据类型的格式化,占位符的格式将有所裁剪。
- %:占位符的其实字符,若要在占位符内部使用%,则需要写成%%。
- [index$]:位置索引从1开始计算,用于指定对索引相应的实参进行格式化并替换掉该占位符。
- [标识]:用于增强格式化能力,可同时使用多个[标识],但某些标识是不能同时使用的。
- [最小宽度]:用于设置格式化后的字符串最小长度,若使用[最小宽度]而无设置。
- [标识],那么当字符串长度小于最小宽度时,则以左边补空格的方式凑够最小宽度。
- [.精度]:对于浮点数类型格式化使用,设置保留小数点后多少位。
- 转换符:用于指定格式化的样式,和限制对应入参的数据类型。
对字符或字符串操作
占位符格式:
%[index$][标识][最小宽度]转换符
String str = "CSDN";
String result = String.format("%1$7s", str);
System.out.println("Hello" + result);
// 简化
result = String.format("%7s", str);
System.out.println("Hello" + result);
// 结果:
Hello CSDN
Hello CSDN
String str = "CSDN";
String result = String.format("%1$-7s", str);
System.out.println("Hello" + result + ",");
// 简化
result = String.format("%-7s", str);
System.out.println("Hello" + result + ",");
// 结果:
HelloCSDN ,
HelloCSDN ,
可用标识:
- -,在最小宽度内左对齐,右边用空格补上。
可用转换符:
- s,字符串类型。
- c,字符类型,实参必须为char或int、short等可转换为char类型的数据类型,否则抛IllegalFormatConversionException异常。
- b,布尔类型,只要实参为非false的布尔类型,均格式化为字符串true,否则为字符串false。
- n,平台独立的换行符(与通过 System.getProperty("line.separator") 是一样的)
对整数操作
占位符格式:
%[index$][标识]*[最小宽度]转换符
// 将 1 显示为 0001
int num = 1;
String str = String.format("%04d", num);
System.out.println(str);
// 结果:
0001
// 将-1000显示为(1,000)
int num = -1000;
String str = String.format("%(,d", num);
System.out.println(str);
// 结果:
(1,000)
可用标识:
- -,在最小宽度内左对齐,不可以与0标识一起使用。
- 0,若内容长度不足最小宽度,则在左边用0来填充。
- #,对8进制和16进制,8进制前添加一个0,16进制前添加0x。
- +,结果总包含一个+或-号。
- 空格,正数前加空格,负数前加-号。
- ,,只用与十进制,每3位数字间用,分隔。
- (,若结果为负数,则用括号括住,且不显示符号。
可用转换符:
- b,布尔类型,只要实参为非false的布尔类型,均格式化为字符串true,否则为字符串false。
- d,整数类型(十进制)。
- x,整数类型(十六进制)。
- o,整数类型(八进制)
- n,平台独立的换行符, 也可通过System.getProperty("line.separator")获取。
对浮点数操作
占位符格式:
%[index$][标识]*[最小宽度][.精度]转换符
double num = 123.4567899;
System.out.print(String.format("%f %n", num));
System.out.print(String.format("%a %n", num));
System.out.print(String.format("%g %n", num));
// 结果
123.456790
0x1.edd3c0bb46929p6
123.457
可用标识:
- -,在最小宽度内左对齐,不可以与0标识一起使用。
- 0,若内容长度不足最小宽度,则在左边用0来填充。
- #,对8进制和16进制,8进制前添加一个0,16进制前添加0x。
- +,结果总包含一个+或-号。
- 空格,正数前加空格,负数前加-号。
- ,,只用与十进制,每3位数字间用,分隔。
- (,若结果为负数,则用括号括住,且不显示符号。
可用转换符:
- b,布尔类型,只要实参为非false的布尔类型,均格式化为字符串true,否则为字符串false。
- n,平台独立的换行符, 也可通过System.getProperty("line.separator")获取。
- f,浮点数型(十进制)。显示9位有效数字,且会进行四舍五入。如99.99。
- a,浮点数型(十六进制)。
- e,指数类型。如9.38e+5。
- g,浮点数型(比%f,%a长度短些,显示6位有效数字,且会进行四舍五入)
对日期时间操作
占位符格式:
%[index$]t转换符
String str = String.format("%tF", new Date());
System.out.println(str);
// 结果
2020-12-15
可用转换符:
- 日期的转换符
c,星期六 十月 27 14:21:20 CST 2007
F,2007-10-27
D,10/27/07
r,02:25:51 下午
T,14:28:16
R,14:28
b, 月份简称
B, 月份全称
a, 星期简称
A, 星期全称
C, 年前两位(不足两位补零)
y, 年后两位(不足两位补零)
j, 当年的第几天
m, 月份(不足两位补零)
d, 日期(不足两位补零)
e, 日期(不足两位不补零)
- 时间的转换符
H, 24小时制的小时(不足两位补零)
k, 24小时制的小时(不足两位不补零)
I, 12小时制的小时(不足两位补零)
i, 12小时制的小时(不足两位不补零)
M, 分钟(不足两位补零)
S, 秒(不足两位补零)
L, 毫秒(不足三位补零)
N, 毫秒(不足9位补零)
p, 小写字母的上午或下午标记,如中文为“下午”,英文为pm
z, 相对于GMT的时区偏移量,如+0800
Z, 时区缩写,如CST
s, 自1970-1-1 00:00:00起经过的秒数
Q, 自1970-1-1 00:00:00起经过的豪秒
- 常用的类型关系:
%s 字符串类型 “喜欢请收藏”
%c 字符类型 ‘m’
%b 布尔类型 true
%d 整数类型(十进制) 88
%x 整数类型(十六进制) FF
%o 整数类型(八进制) 77
%f 浮点类型 8.888
%a 十六进制浮点类型 FF.35AE
%e 指数类型 9.38e+5
%g 通用浮点类型(f和e类型中较短的) 不举例(基本用不到)
%h 散列码 不举例(基本用不到)
%% 百分比类型 %(%特殊字符%%才能显示%)
%n 换行符 不举例(基本用不到)
%tx 日期与时间类型(x代表不同的日期与时间转换符) 不举例(基本用不到)
- END -