Loading...
墨滴

远方聂努达

2022/01/10  阅读:39  主题:极简黑

JAVA 中字符串占位符的使用

使用 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 -

远方聂努达

2022/01/10  阅读:39  主题:极简黑

作者介绍

远方聂努达