博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java util 包下 Formatter格式化相关的操作
阅读量:6691 次
发布时间:2019-06-25

本文共 2846 字,大约阅读时间需要 9 分钟。

hot3.png

        Java 1.5开始,提供了类似C语言格式化文本的功能。与在java.util包下与格式化有关的类或接口有4个,分别是Formattable、FormattableFlags、Formatter、FormatFlagsConversionMismatchException。其中,最主要的是Formatter类与Formattable接口,另外两个FormattableFlags是为Formattable接口提供服务的,FormatFlagsConversionMismatchException是异常类。

一、Formatter的用法

        先来分析Formatter的用法,通过分析源码,我们可以看到,Formatter的构造函数有12个,可见Formatter的功能非常大强大,不过,这12个可以分成如下几类,一类是字符串操作Formatter(),Formatter(Appendable a),Formatter(Appendable a,  Locale l),Formatter(Local l);一类是关于文件的操作,分别是Formatter(File file),Formatter(File file, String csn),Formattter(File file, String csn, Local l),Formatter(String fileName),Formatter(String filename, String csn),Formatter(String filename, String csn, Locale l);一类是关于输出流的操作,分别是Formatter(OutputStream os),Formatter(OutputStream os , String csn),Formatter(OutputStream os, String csn, Local l),Formatter(PrintStream ps)

1、  对字符串的操作

针对的是实现Appendable接口的字符串,我们对Appendable接口可能比较陌生,但是对于实现了改接口的StringBuffer、StringBuilder类肯定比较熟悉,他们共同的特点就是都有append函数。以下代码实现对字符串的操作:

      

StringBuilder sb = new StringBuilder();

      Formatter formatter = new Formatter(sb, Locale.UK);

     

      formatter.format("%4$2s %3$2s %2$2s %1$2s", "a", "b", "c", "d");

      System.out.println(sb);

     

       formatter.format(Locale.FRANCE, "e = %+10.4f", Math.E);

       System.out.println(sb);

       

      // String balanceDelta = "mmmm";

       formatter.format("Amount gained or lost since last statement: $ %(,.2f", Math.E);

     System.out.println(sb);

2、  对文件的操作

以下代码可以实现文件的写操作。

File f = new File("C:/Temp/InstallConfig.ini");

   try {

         Formatter formatter = new Formatter(f);

         formatter.format("%4$2s %3$2s %2$2s %1$2s", "a", "b", "c", "d");

formatter.format("%4$2s %3$2s %2$2s %1$2s", "a", "b", "c", "d");

         formatter.flush();

         formatter.close();

   } catch (FileNotFoundException e) {

         e.printStackTrace();

}

 

3、  对输出流的操作

以下代码实现输出流的操作、

try {

//BufferedOutputStream bos = new BufferedOutputStream(System.out);

         Formatter formatter = new Formatter(System.out);

         formatter.format("%4$2s %3$2s %2$2s %1$2s", "a", "b", "c", "d");

formatter.format("%4$2s %3$2s %2$2s %1$2s", "a", "b", "c", "d");

formatter.flush();

         formatter.close();

      } catch (Exception e) {

         e.printStackTrace();

      }

        通过以上代码,我们知道了Formatter的使用场景,接下来分析如何使用。Formatter里面最主要的函数就是format()函数,该函数实现了重载,分别是public Formatter format(String format, Object ... args)与public Formatter format(Locale l, String format, Object ... args),其中,第一个函数是在内部调用了第二个函数。

    Locale l:本地方言

    String format:要格式化的字符串

    Object ... args:可变个数的参数对象

要格式化字符串,在字符串中就需要声明,声明的格式如下:

    %[argument_index$][flags][width][.precision]conversion

    argument_index:后面参数... args的位置,从1到参数的个数;

    flags:可选 flags 是修改输出格式的字符集。有效标志集取决于转换类型

    width:控制一个域的最小值,默认情况下下是右对齐的,可以通过使用“-”标志来改变对其方向。

    precision:精度,用于String时,表示输出字符的最大数量,用于浮点数时,表示小数部分要显示出来的 位数(默认是6位),多则舍入,少则补0,用于整数会触发异常。

    conversion:转换格式。

具体用法可参见:

二、Formattable的用法

    凡是继承实现了Formattable接口的对象,都可以被Formatter格式化,不过,格式化的conversion只能是以’s’结尾的,jdk中提供了一个例子。有兴趣的可以看一下。

转载于:https://my.oschina.net/wuxiaohe/blog/713105

你可能感兴趣的文章
PBRT笔记(12)——蒙特卡洛积分
查看>>
自己用 python 实现 base64 编码
查看>>
获取某一天每个小时的数据
查看>>
LeetCode 222. Count Complete Tree Nodes
查看>>
对Fiddler设置【Decrypt HTTPS traffic】后火狐浏览器打开https【您的连接并不安全】的解决方法...
查看>>
0059-乘积问题
查看>>
2019年的第一篇随笔
查看>>
关于公网ip的一些信息(摘抄)
查看>>
5分钟弄懂Docker!
查看>>
BZOJ1076:[SCOI2008]奖励关(状压DP,期望)
查看>>
BZOJ2223/3524:[POI2014] Couriers(主席树)
查看>>
MyEclipse — Maven+Spring+Struts+Hibernate 整合 [学习笔记-5]
查看>>
Nodejs 连接各种数据库集合例子
查看>>
easyui的datagrid用js插入数据等编辑功能的实现
查看>>
Windows App开发之集合控件与数据绑定
查看>>
AMD、CMD/AMD与CMD的区别
查看>>
Python~第一天
查看>>
Linux管理用户账号
查看>>
redis中使用lua脚本
查看>>
颜色数组
查看>>