String.format输出格式化的字符串spa
中括号标注([])的为可选参数.code
常规类型、字符类型和数值类型的格式说明符的语法以下:orm
%[argument_index$][flags][width][.precision]conversion 对象
%[参数索引][标识集][输出宽度][.限制字符]标明如何格式化字符索引
可选的 argument_index 是一个十进制整数,用于代表参数在参数列表中的位置。第一个参数由 "1$" 引用,第二个参数由 "2$" 引用,依此类推。ci
可选 flags是修改输出格式的字符集。有效标志集取决于转换类型。字符串
可选 width是一个非负十进制整数,代表要向输出中写入的最少字符数。(最终该整数转化的字符串最少包含多少位数字 )io
可选 precision是一个非负十进制整数,一般用来限制字符数。特定行为取决于转换类型。(保留精度)form
所需 conversion是一个代表应该如何格式化参数的字符。给定参数的有效转换集取决于参数的数据类型。test
用来表示日期和时间类型的格式说明符的语法以下:
%[argument_index$][flags][width]conversion
conversion 是一个由两字符组成的序列。第一个字符是 't' 或 'T'。第二个字符代表所使用的格式。
%[argument_index$][flags][width][.precision]conversion
标识flags:
'-' 在最小宽度内左对齐,不能够与“用0填充”同时使用
'#' 只适用于8进制和16进制,8进制时在结果前面增长一个0,16进制时在结果前面增长0x
'+' 结果老是包括一个符号(通常状况下只适用于10进制,若对象为BigInteger才能够用于8进制和16进制)
' ' 正值前加空格,负值前加负号(通常状况下只适用于10进制,若对象为BigInteger才能够用于8进制和16进制)
'0' 结果将用零来填充
',' 只适用于10进制,每3位数字之间用“,”分隔
'(' 若参数是负数,则结果中不添加负号而是用圆括号把数字括起来(同‘+’具备一样的限制)
示例代码:
int number1 = 5; int number2 = 0; int number3 = -12; System.out.println("\n------------------ 方法 1 ------------\n"); DecimalFormat format = new DecimalFormat("0000"); System.out.println(format.format(number1)); System.out.println(format.format(number2)); System.out.println(format.format(number3)); System.out.println("\n------------------ 方法 2 ------------\n"); // 0 表明前面补充0 // 4 表明长度为4 // d 表明参数为正数型 // 输出格式化的字符串 System.out.println(String.format("%d", number1)); System.out.println(String.format("%04d", number1)); System.out.println(String.format("%04d", number2)); System.out.println(String.format("%04d", number3)); System.out.println(String.format("%04d;%09d", number3, number3)); System.out.println(String.format("%04d%09d", number3, number3)); System.out.println(String.format("%2$08d", -3123, -5566)); //引用第三个参数
运行结果:
------------------ 方法 1 ------------
0005
0000
-0012
------------------ 方法 2 ------------
5
0005
0000
-012
-012;-00000012
-012-00000012
-0005566
%[argument_index$][flags][width][.precision]conversion
标识flags:
'-' 在最小宽度内左对齐,不能够与 用0填充 同时使用
'+' 结果老是包括一个符号
' ' 正值前加空格,负值前加负号
'0' 结果将用零来填充
',' 每3位数字之间用“,”分隔(只适用于fgG的转换)
'(' 若参数是负数,则结果中不添加负号而是用圆括号把数字括起来(只适用于eEfgG的转换)
@Test public void test() { // 还能够限制小数点后的位数 System.out.printf("%.1f; %.3f%n", -756.403f, 7464.232641d); //输出后换行 System.out.println(String.format("%1$011.1f;%2$.3f%n", 756.403f, 7464.232641d)); }
运行结果:
-756.4; 7464.233
000000756.4;7464.233
在第二条输出语句中,
%1$011.1f
格式说明符
1$表示选取第一个输入参数
0表示填充字符
11表示输出的位数
. 1表示保留一位小数
@Test public void test9887() { double pi = 3.1415927;//圆周率 //取一位整数 System.out.println(new DecimalFormat("0").format(pi));//3 //取一位整数和两位小数 System.out.println(new DecimalFormat("0.00").format(pi));//3.14 //取两位整数和三位小数,整数不足部分以0填补。 System.out.println(new DecimalFormat("00.000").format(pi));// 03.142 //取全部整数部分 System.out.println(new DecimalFormat("#").format(pi));//3 //以百分比方式计数,并取两位小数 System.out.println(new DecimalFormat("#.##%").format(pi));//314.16% long c = 299792458;//光速 //显示为科学计数法,并取五位小数 System.out.println(new DecimalFormat("#.#####E0").format(c));//2.99792E8 //显示为两位整数的科学计数法,并取四位小数 System.out.println(new DecimalFormat("00.####E0").format(c));//29.9792E7 //每三位以逗号进行分隔。 System.out.println(new DecimalFormat(",###").format(c));//299,792,458 //将格式嵌入文本 System.out.println(new DecimalFormat("光速大小为每秒,###米。").format(c)); }
DecimalFormat 类主要靠 # 和 0 两种占位符号来指定数字长度。0 表示若是位数不足则以 0 填充,# 表示只要有可能就把数字拉上这个位置。
============END============