String formate的语法解析及简单用法

转自: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();
        //
    }
}

猜你喜欢

转载自www.cnblogs.com/Yiran-shampin/p/9572676.html
今日推荐