开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第22天,点击查看活动详情
- 不知道你有没有遇到经常需要对数据进行格式化的需求活着场景。这种问题就很烦,食之无味弃之可惜!!!
格式化标准
- j d k里面其实为了我们提供了相应的工具类,那就是
String,对你没看错就是String - 通过
String.format我们就能对我们常见的字符串,数字进行格式化了,比如我们可以保留固定小数,保留固定长度的数字显示比如202201, 这里的01代表月份,这样就能让他始终是6位。
%[argument_index$][flags][width][.precision][t]conversion
java.util.IllegalFormatPrecisionException错(非法精度)。
- % , 占位符开始的符号(同时也是占位符中的转义字符)。
- [argument_index$] ,位置索引从1开始计算,用于指定对索引相应的实参进行格式化并替换掉该占位符。
- [flags] ,用于增强格式化能力,可同时使用多个 [flags] ,但某些标识是不能同时使用的。
- [width] ,用于设置格式化后的字符串最小长度,若使用 [最小宽度] 而无设置 [标识] ,那么当字符串长度小于最小宽度时,则以左边补空格的方式凑够最小宽度。
- [•precision] ,对于浮点数类型格式化使用,设置保留小数点后多少位。
- [t] , 时间格式
- conversion ,用于指定格式化的样式,和限制对应入参的数据类型。
# 格式化浮点数
%[argument_index$][flags][width][.precision]conversion
-
这里的占位符和上述的标准占位符一样。唯一需要解释的就是flags(可用标识)和conversion(转换类型)。
-
flags:
-
- :在最小宽度内左对齐,不可以与0标识一起使用。
- 0 :若内容长度不足最小宽度,则在左边用0来填充。
-
- :结果总包含一个+或-号。
- 空格 :正数前加空格,负数前加-号。
- , :只用与十进制,每3位数字间用,分隔。
- ( :若结果为负数,则用括号括住,且不显示符号。
-
-
conversion:
- e或E :结果被格式化为用计算机科学记数法表示的十进制数
- f :结果被格式化为十进制普通表示方式
- g或G :根据具体情况,自动选择用普通表示方式还是科学计数法方式,
- a或A :结果被格式化为带有效位数和指数的十六进制浮点数
-
notes:
- 在浮点数中,如果精度(precision)没有指定的情况下,默认精度(precision)为6
- conversion=e,保留小数点后
precision位 - conversion=f,保留小数点后
precision位 - conversion=g,保留
precision位有效数字 - conversion=a,保留小数点后
precision位
-
examples:
System.out.println(String.format("%20.9a", 1223d));
System.out.println(String.format("%20.9e", 1223d));
System.out.println(String.format("%20.9f", 1223d));
System.out.println(String.format("%20.9g", 12123d));
格式化整数
%[argument_index$][flags][width]conversion
-
flags:
-
- :在最小宽度内左对齐,不可以与0标识一起使用。
- 0 :若内容长度不足最小宽度,则在左边用0来填充。
-
:对8进制和16进制,8进制前添加一个0,16进制前添加0x。
-
- :结果总包含一个+或-号。
- 空格 :正数前加空格,负数前加-号。
- , :只用与十进制,每3位数字间用,分隔。
- ( :若结果为负数,则用括号括住,且不显示符号。
-
-
conversion:
- d :十进制
- o :八进制
- x或X :十六进制
- n :平台独立的换行符, 也可通过System.getProperty("line.separator")获取。
String.format("%n","234"),实际就是一个换行符 - b :布尔类型,只要实参为非false的布尔类型,均格式化为字符串true,否则为字符串false。
-
examples: 其中 十进制、八进制、十六进制都是整数可以互相使用,只有#适合八进制或者十六进制