文档章节

Java util 包下 Formatter格式化相关的操作

吴小河
 吴小河
发布于 2016/07/16 22:14
字数 880
阅读 12
收藏 0

        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:转换格式。

具体用法可参见:

http://www.itzhai.com/java-notes-java-in-the-formatted-output-formatter-class-presentation.html

二、Formattable的用法

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

© 著作权归作者所有

共有 人打赏支持
吴小河
粉丝 3
博文 5
码字总数 2517
作品 0
朝阳
程序员
私信 提问
在Eclipse里设置格式化代码时不格式化注释

在Eclipse里设置格式化代码时不格式化注释 今天格式化代码 发现直接format会把注释也一块格式化了,有时候会把好好的注释弄的很乱。甚为头疼。 查阅之后解决办法如下: Windows -> Preferces...

小白白网
2014/02/19
4.8K
1
扩展 JDT 实现自动代码注释与格式化

简介: 本文介绍了一个为 Eclipse 工作空间中的 Java 代码自动添加统一注释并格式化排版的工具及其具体实现。该工具扩展 Eclipse Java Development Tool(JDT)API,操作 Java 代码。通过本文...

红薯
2010/07/30
1K
1
Java Formatter 心得

阅读java util 包的源码的时候,忽然发现了,一个格式化类的使用,看完以后,发现,以前写代码太没有思考了,copy 过来就来用,其实,如果,只是多了解一点的话,也算是给自己多一种方式. question 1 ...

打杂程序猿
2013/04/28
0
3
如何自定义eclipse代码格式化(Ctrl+Shift+F)

使用eclipse的都知道它有一个快捷键Ctrl+Shift+F,用来格式化代码,但是eclipse默认自带的格式化效果也有不完美的地方。所以有时候你需要自定义eclipse代码格式化,下面举例说明: java代码的...

只抽白沙
2015/03/23
5
0
Java GUI实用小工具集 - Common Gui Tools

Common Gui Tools 是用java编写,GUI界面的实用小工具集,1.4版有20个小工具: 1,编码转换:Character Converter 2,加密解密:Encrypt And Decrypt 3,计算文件数字签名:File Digital Si...

bs2004
2013/03/20
0
3

没有更多内容

加载失败,请刷新页面

加载更多

dockerfile 镜像构建(1)

通用dockerfile 利用已经编译好的.jar 来构建镜像。要构建的目录如下: [root@iZuf61quxhnlk9m2tkx16cZ demo_jar]# docker build -t demo:1 . 运行镜像: [root@iZuf61quxhnlk9m2tkx16cZ de...

Canaan_
今天
2
0
Redis radix tree源码解析

Redis实现了不定长压缩前缀的radix tree,用在集群模式下存储slot对应的的所有key信息。本文将详述在Redis中如何实现radix tree。 核心数据结构 raxNode是radix tree的核心数据结构,其结构体...

阿里云云栖社区
今天
13
0
vue import 传入变量

在做动态添加component的时候,传入变量就会报错,出现以下错误信息: vue-router.esm.js?fe87:1921 Error: Cannot find module '@/components/index'. at eval (eval at ./src/components ......

朝如青丝暮成雪
今天
3
0
Flutter开发 Dio拦截器实现token验证过期的功能

前言: 之前分享过在Android中使用Retrofit实现token失效刷新的处理方案,现在Flutter项目也有“token验证过期”的需求,所以接下来我简单总结一下在Flutter项目中如何实现自动刷新token并重...

EmilyWu
今天
9
0
final Map可以修改内容,final 常量不能修改

1.final Map 可以put元素,但是不可以重新赋值 如: final Map map = new HashMap(); map = new HashMap();//不可以 因为栈中变量map引用地址不能修改 2.final str = “aa”; str = "bb";/......

qimh
今天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部