String.format输出格式化的字符串
格式说明符的语法如下:
中括号标注([])的为可选参数.
常规类型、字符类型和数值类型的格式说明符的语法如下:
%[argument_index$][flags][width][.precision]conversion
%[参数索引][标识集][输出宽度][.限制字符]标明如何格式化字符
可选的 argument_index 是一个十进制整数,用于表明参数在参数列表中的位置。第一个参数由 "1$" 引用,第二个参数由 "2$" 引用,依此类推。
可选 flags是修改输出格式的字符集。有效标志集取决于转换类型。
可选 width是一个非负十进制整数,表明要向输出中写入的最少字符数。(最终该整数转化的字符串最少包含多少位数字 )
可选 precision是一个非负十进制整数,通常用来限制字符数。特定行为取决于转换类型。(保留精度)
所需 conversion是一个表明应该如何格式化参数的字符。给定参数的有效转换集取决于参数的数据类型。
用来表示日期和时间类型的格式说明符的语法如下:
%[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表示保留一位小数
使用DecimalFormat格式化输出数字
@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============