String.format输出格式化的字符串

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: 

  1. '-'    在最小宽度内左对齐,不可以与“用0填充”同时使用 

  2. '#'   只适用于8进制和16进制,8进制时在结果前面增加一个0,16进制时在结果前面增加0x 

  3. '+'   结果总是包括一个符号(一般情况下只适用于10进制,若对象为BigInteger才可以用于8进制和16进制) 

  4. '  '  正值前加空格,负值前加负号(一般情况下只适用于10进制,若对象为BigInteger才可以用于8进制和16进制) 

  5. '0'   结果将用零来填充 

  6. ','   只适用于10进制,每3位数字之间用“,”分隔 

  7. '('   若参数是负数,则结果中不添加负号而是用圆括号把数字括起来(同‘+’具有同样的限制) 

示例代码:

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: 

  1. '-'    在最小宽度内左对齐,不可以与 用0填充 同时使用

  2. '+'    结果总是包括一个符号 

  3. '  '    正值前加空格,负值前加负号 

  4. '0'    结果将用零来填充 

  5. ','    每3位数字之间用“,”分隔(只适用于fgG的转换) 

  6. '('    若参数是负数,则结果中不添加负号而是用圆括号把数字括起来(只适用于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============

转载于:https://my.oschina.net/xinxingegeya/blog/292139

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值