format保持统一

77 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 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: 其中 十进制、八进制、十六进制都是整数可以互相使用,只有#适合八进制或者十六进制