转自:https://blog.csdn.net/jiangyu1013/article/details/52607257
package cn.wuxiangbin.StringFormat; import java.text.DateFormat; import java.util.Calendar; import java.util.Date; /** * StringFormat解析 * 公式: %[argument_index$][flags][width][.precision]conversion * argument_index: 可选,是一个十进制整数,用于表明参数在参数列表中的位置。 * 第一个参数由 "1$" 引用,第二个参数由 "2$" 引用,依此类推。 flags: 可选,用来控制输出格式 width: 可选,是一个正整数,表示输出的最小长度 precision:可选,用来限定输出字符数 conversion:必须,用来表示如何格式化参数的字符 */ public class Demo01 { public static void main(String[] args) { //案例1 System.out.println(String.format("我的名字叫%s","小明")); //我的名字叫小明, 占位的字符一定要是s,否则报错,%是标识一定要有 //案例2 System.out.println(String.format("我叫%s,她叫%s","小明","小红")); //我叫小明,她叫小红 //案例3 System.out.println(String.format("我叫%2$s,她叫%1$s","小明","小红")); //我叫小红,她叫小明, 1$,2$表示参数填充顺序 /** * conversion可以填s,那还有什么其它字母可以填呢,当然有的比如 o:结果被格式化为八进制整数 x:结果被格式化为十六进制 d:结果被格式化为十进制整数 更多的conversion类别可以参考JDK文档java.util.Formatter类 */ //案例4 System.out.println(String.format("%o",8)); //10 System.out.println(String.format("%x",8)); //8 /** * 接下来我们了解flag和width的用法 flag是用来控制输出格式的,比如左对齐,金额用逗号隔开等 width:表示最小宽度 */ //案例5 System.out.println(String.format("%1$,d",12302562));//12,302,562 //","就是flag,用于金额千分位隔开,也可以写成"%,d" //案例6 System.out.println(String.format("%1$08d",123456));//00123456 //0也是flag, 表示结果用0填充,8 就是width,表示最少要8位,d就是conversion /** * 接下来说下[.precision] 这个单词翻译下是精度的意思,我们发现了前面有个小数点".",因此不难联想到这个是关于浮点数类型的 只有当传入的数据是浮点数时这个才有用,整数或者日期类型的数据都不能用 */ //案例7 System.out.println(String.format("%1$.2f",12.12555));//12.13 //"."就是precision,表示精度,数字表示取精度位 // f是conversion表示传入的数字是浮点型, /** * 用法说明: * 对于浮点转换 'e'、'E' 和 'f',精度是小数点分隔符后的位数。如果转换是 'g' 或 'G',那么精度是舍入计算后所得数值的所有位数。如果转换是 'a' 或 'A',则不必指定精度。 对于字符、整数和日期/时间参数类型转换,以及百分比和行分隔符转换,精度是不适用的;如果提供精度,则会抛出异常。 */ /** * 具体应用: * 用于表示日期和事件类型的格式说明符语法: * %[argument_index$][flags][width]conversion *需要注意的是conversion 是一个由两字符组成的序列。第一个字符是 't' 或 'T'。 也就是说用conversion的时候首先必要写一个"t",然后在写其它conversion */ //案例7 System.out.format("Local time: %tT", Calendar.getInstance()); //Local time: 21:49:44 System.out.format("Local time: %tT", new Date()); System.out.println(); //Local time: 21:50:08 System.out.format("%1$tY-%1$tm-%1$te", new Date()); System.out.println(); //2018-09-1 /** * 需要批量进行格式化时,考 * 虑下DateFormat, MessageFormat, NumberFormat 把他们封装成一个静态工具类或许更好 */ DateFormat dateInstance = DateFormat.getDateInstance(); // } }