记录个常用的格式化工具
// 注: 如果填写非规定的格式,会抛出IllegalFormatConversionException
String.format("字符串:%1$s,字符:%2$c,数字:%3$d,浮点数:%4$f,布尔值:%4$b", "字符串", 'c', 2, 5.18, true);
// 注: 正负数都用(+) 控制小数点位数(.2f,.3f等) 结果: 正数:+5, 负数:-1.10
String.format("正数:%1$+d, 负数:%2$+.2f", 5, -1.1);
/**
* 注: %1$s 指定参数下标和数据类型, %s是按参数顺序进行赋值
* 1.不满5位,在前面以0来补位。$后一位只能填写0,如果不填那么默认空字符串补位
* 如: (%1$3, 1) ' 1'
* (%1$13, 1) (' ..1'总计13位)
* 2.数字分组: 每千位分组, f同理
*
* 一、相关数字格式 (DecimalFormat, BigDecimal(长精度浮点类))
* new DecimalFormat().setGroupingSize(3): 可以设置指定位数进行分组
* new DecimalFormat("#,##.##"): 每二位进行分组,并设置只保留小数点后2位(第三位四舍五入)
* #: 代表一个数字,不包括0 如:##.### 2.2 结果:2.2
* 0: 代表一个数字 如: 00.00 2.2 结果:2.20
* setMaximumIntegerDigits(1) 设置最大整数位,多了忽略
* setMaximumFractionDigits(1) 设置最大小数位,配合setRoundingMode(RoundingMode.FLOOR)使用,不四舍五入
* 或: new DecimalFormat("00.00").setRoundingMode(RoundingMode.FLOOR)不四舍五入
* setMinimumIntegerDigits(1) 设置最小整数位,不足以0补位
* setMinimumFractionDigits(1) 设置最小小数位,不足以0补位
* 注: 如果初始化设置了pattern,调用方法再次设置会覆盖pattern相同的设置。
*
*/
String.format("补位:%1$015d,数字千位分组:%2$,d", 11, 1000);
DecimalFormat decimalFormat = new DecimalFormat(",##.##");
decimalFormat.setMinimumFractionDigits(2);
decimalFormat.setRoundingMode(RoundingMode.FLOOR);
decimalFormat.format(1);
/**
* 时间格式化(不支持LocalDateTime等jdk1.8新增工具类)
* String.format(Locale.US, "", 参数): 参数1可以设置转换的地区
* %tc: 全部日期格式 (星期六 三月 23 11:52:56 CST 2019)
* %tF: 2019-03-23
* %tD: dd/MM/yy
* %tr: “HH:MM:SS PM”格式(12时制) 02:25:51 下午
* %tT: "HH:MM:SS"(24时制)
* %tR: "HH:MM"(24时制)
* %tb: 月份 (三月) 简称(Locale.US) Sep
* %tB: 月份 (三月) 全称(Locale.US) September
* %ta: 星期(星期六)
* %tj: 当前据年天数(082) 三位
* %tm: 当前月份(03)
* %td: 当前日历天数(23) 不够二位补0
* %te: 当前日历天数(23) 不补0
* %tp: 上午或下午
* %ts: 1970-1-1 00:00:00 到现在所经过的秒数
* %tQ: 1970-1-1 00:00:00 到现在所经过的毫秒数
*/
Date now = new Date();
String.format("全时间:%1$tc,年月日:%tF,月份:%1$tb," +
"星期:%1$ta, 当前年天数:%1$tj, 时段:%1$tp", now);
其他工具类:
数字操作
DecimalFormat、BigDecimal、BigInteger等
原子类
AtomicInteger等等
时间
LocalDateTime、LocalDate等
操作日历
Calendar这个类很好用