Formatter 类 组合字符串

9 篇文章 0 订阅
StringBuilder buf = new StringBuilder("");
        Formatter formatter = new Formatter(buf);
        formatter.format("%s%s%08d","201",301,3);

        System.out.println(buf.toString());



可以试试这个方法.  format("%s%s%08d","201",301,3);

组合成的 字符串就是     201 +301 + 8位数字  尾号为3  前面补0

就是   20130100000003



java.util.Formatter

 

java.util.Formatter JDK1.5新增的类库,功能很强大,但是不好掌握,就像下棋一样,知道如何走棋子,和熟练应用完全是两码事。

 

格式化主要用在文本输出方面,比如,数字、日期、金额等,还有类似超市的购物单小票等等,都会用到格式化输出的工具。在此类没出现之前,只能通过空格缩进或这个制表符来对单据等格式做一些控制,现在只要掌握java.util.Formatter,一切问题就解决了。

 

shut!有关这个类javadoc文档太难看懂了,通过猜测、尝试、查看源码、对文档断章取义基本搞明白了,写了下面的例子:

 

import java.util.Calendar; 
import java.util.Formatter; 
import java.util.GregorianCalendar; 

 
public class TestFormatter { 

        
public static void main(String[] args){ 
                
//%[argument_index$][flags][width][.precision]conversion 
               Formatter f1 = 
new Formatter(System.out); 
                
//格式化输出字符串和数字 
               f1.format(
"格式化输出:%s %d""a", 1235); 
               System.out.println(
"\n--------"); 
                
//日期的格式化 
               Calendar c = 
new GregorianCalendar(); 
               f1.format(
"当前日期:%1$tY-%1$tm-%1$te", c); 
               System.out.println(
"\n--------"); 
                
//日期的格式化,并将格式化结果存储到一个字符串变量中 
               String s = String.format(
"当前日期:%1$tY-%1$tm-%1$te", c); 
               System.out.println(s); 
                
//2$:取第二个参数 
                
//-: 指定为左对齐,默认右对齐 
                
//5:最大输出宽度为20,不够会补空格,实际若超过则全部输出 
                
//.2:在此表示输出参数2的最大字符数量,如果是浮点数字,则表示小数部分显示的位数 
                
//s :表示输入参数是字符串 
               f1.format(
"%2$-5.2s %1$2s""123""456"); 

                
//将格式化的结果存储到字符串 
               System.out.println(
"\n--------"); 
               String fs = String.format(
"身高体重(%.2f ,%d)", 173.2, 65); 
               System.out.println(fs); 

                
//printf()本质上也是用System.out作为输出目标构造Formatter对象 
                
//调用format方法,并将printf的参数传给format方法而得。 
               System.out.println(
"\n--------"); 
               System.out.printf(
"身高体重(%.2f ,%d)", 180.2, 65); 


       
}

 

运行结果:

格式化输出:a 1235 
-------- 
当前日期:2009-07-16 
-------- 
当前日期:2009-07-16 
45       123 
-------- 
身高体重(173.20 , 65) 

-------- 
身高体重(180.20 , 65) 
Process finished with exit code 0

 

总结:

1java.util.Formatter功能强大,主要用于自由格式的制定,也可以指定金额、日期等格式。但以使用方便为原则。

 

2、其他格式化类:

java.text.DateFormatSymbols 
java.text.DecimalFormatSymbols 
java.text.FieldPosition 
java.text.Format 
               java.text.DateFormat 
                       java.text.SimpleDateFormat 
               java.text.MessageFormat 
               java.text.NumberFormat 
                       java.text.ChoiceFormat 
                       java.text.DecimalFormat

 

3String.format()System.out.printf()方法底层也是通过此类方法调用实现的。

 

4Calendar类用来表示系统抽象时间,是日期格式化等操作中最重要的一个类,这个类的实例化方式是:

Calendar rightNow = Calendar.getInstance();

并且可以通过下面的方法改变实例所表示的抽象时间:

void setTime(Date date) 
          
使用给定的 Date 设置此 Calendar 的时间。 
void setTimeInMillis(long millis) 
          
用给定的 long 值设置此 Calendar 的当前时间值。

有关日期的格式化还比较复杂,不光与现实方式有关,其实还与时区、国家习惯等等有关,因此在处理日期格式化问题上一定要慎重对待,没有理由不用专门的类做处理。

 

二、java.text.Format

 

Format 是一个用于格式化语言环境敏感的信息(如日期、消息和数字)的抽象基类。

 

光从类的层次结构上看,Java对格式的处理也算费了大劲了,但还是不怎么好用。

 

消息格式化类比较让人郁闷,SUNAPI文档看起来好像翻译的有毛病。

 

import java.text.MessageFormat; 
import java.util.Date; 

 
public class TestMsgFormat { 
        
public static void main(String[] args){ 
               String msg = 
"欢迎光临,当前({0})等待的业务受理的顾客有{1}位,请排号办理业务!"
               MessageFormat mf = 
new MessageFormat(msg); 
               String fmsg = mf.format(
new Object[]{new Date(), 35}); 
               System.out.println(fmsg); 
       
}

 

欢迎光临,当前(09-7-29 下午11:17)等待的业务受理的顾客有35位,请排号办理业务! 

Process finished with exit code 0


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值