小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

java.util.Formatter 詳解

 @IT小小鳥(niǎo)@ 2012-01-29

java.util.Formatter 詳解

一、java.util.Formatter

 

java.util.Formatter JDK1.5新增的類庫(kù),功能很強(qiáng)大,但是不好掌握,就像下棋一樣,知道如何走棋子,和熟練應(yīng)用完全是兩碼事。

 

格式化主要用在文本輸出方面,比如,數(shù)字、日期、金額等,還有類似超市的購(gòu)物單小票等等,都會(huì)用到格式化輸出的工具。在此類沒(méi)出現(xiàn)之前,只能通過(guò)空格縮進(jìn)或這個(gè)制表符來(lái)對(duì)單據(jù)等格式做一些控制,現(xiàn)在只要掌握java.util.Formatter,一切問(wèn)題就解決了。

 

shut!有關(guān)這個(gè)類javadoc文檔太難看懂了,通過(guò)猜測(cè)、嘗試、查看源碼、對(duì)文檔斷章取義基本搞明白了,寫(xiě)了下面的例子:

 

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

/**
* Formatter
測(cè)試
*
* @author leizhimin 2009-7-16 16:31:02
*/

public class TestFormatter {

       
public static void main(String[] args) {
               
//%[argument_index$][flags][width][.precision]conversion
                Formatter f1 =
new Formatter(System.out);
               
//格式化輸出字符串和數(shù)字
                f1.format(
"格式化輸出:%s %d", "a", 1235);
                System.out.println(
"\n--------");
               
//日期的格式化
                Calendar c =
new GregorianCalendar();
                f1.format(
"當(dāng)前日期:%1$tY-%1$tm-%1$te", c);
                System.out.println(
"\n--------");
               
//日期的格式化,并將格式化結(jié)果存儲(chǔ)到一個(gè)字符串變量中
                String s = String.format(
"當(dāng)前日期:%1$tY-%1$tm-%1$te", c);
                System.out.println(s);
               
//2$:取第二個(gè)參數(shù)
               
//-: 指定為左對(duì)齊,默認(rèn)右對(duì)齊
               
//5:最大輸出寬度為20,不夠會(huì)補(bǔ)空格,實(shí)際若超過(guò)則全部輸出
               
//.2:在此表示輸出參數(shù)2的最大字符數(shù)量,如果是浮點(diǎn)數(shù)字,則表示小數(shù)部分顯示的位數(shù)
               
//s :表示輸入?yún)?shù)是字符串
                f1.format(
"%2$-5.2s %1$2s", "123", "456");

               
//將格式化的結(jié)果存儲(chǔ)到字符串
                System.out.println(
"\n--------");
                String fs = String.format(
"身高體重(%.2f , %d)", 173.2, 65);
                System.out.println(fs);

               
//printf()本質(zhì)上也是用System.out作為輸出目標(biāo)構(gòu)造Formatter對(duì)象
               
//調(diào)用format方法,并將printf的參數(shù)傳給format方法而得。
                System.out.println(
"\n--------");
                System.out.printf(
"身高體重(%.2f , %d)", 180.2, 65);


        }
}

 

運(yùn)行結(jié)果:

格式化輸出:a 1235
--------
當(dāng)前日期:2009-07-16
--------
當(dāng)前日期:2009-07-16
45        123
--------
身高體重(173.20 , 65)

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

 

總結(jié):

1java.util.Formatter功能強(qiáng)大,主要用于自由格式的制定,也可以指定金額、日期等格式。但以使用方便為原則。

 

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

 

3、String.format()、System.out.printf()方法底層也是通過(guò)此類方法調(diào)用實(shí)現(xiàn)的。

 

4Calendar類用來(lái)表示系統(tǒng)抽象時(shí)間,是日期格式化等操作中最重要的一個(gè)類,這個(gè)類的實(shí)例化方式是:

Calendar rightNow = Calendar.getInstance();

并且可以通過(guò)下面的方法改變實(shí)例所表示的抽象時(shí)間:

void setTime(Date date)
         
使用給定的 Date 設(shè)置此 Calendar 的時(shí)間。
void setTimeInMillis(long millis)
         
用給定的 long 值設(shè)置此 Calendar 的當(dāng)前時(shí)間值。

有關(guān)日期的格式化還比較復(fù)雜,不光與現(xiàn)實(shí)方式有關(guān),其實(shí)還與時(shí)區(qū)、國(guó)家習(xí)慣等等有關(guān),因此在處理日期格式化問(wèn)題上一定要慎重對(duì)待,沒(méi)有理由不用專門(mén)的類做處理。

 

二、java.text.Format

 

Format 是一個(gè)用于格式化語(yǔ)言環(huán)境敏感的信息(如日期、消息和數(shù)字)的抽象基類。

 

光從類的層次結(jié)構(gòu)上看,Java對(duì)格式的處理也算費(fèi)了大勁了,但還是不怎么好用。

 

消息格式化類比較讓人郁悶,SUNAPI文檔看起來(lái)好像翻譯的有毛病。

 

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

/**
*
消息格式化類的使用
*
* @author leizhimin 2009-7-29 23:09:41
*/

public class TestMsgFormat {
       
public static void main(String[] args) {
                String msg =
"歡迎光臨,當(dāng)前({0})等待的業(yè)務(wù)受理的顧客有{1}位,請(qǐng)排號(hào)辦理業(yè)務(wù)!";
                MessageFormat mf =
new MessageFormat(msg);
                String fmsg = mf.format(
new Object[]{new Date(), 35});
                System.out.println(fmsg);
        }
}

 

歡迎光臨,當(dāng)前(09-7-29 下午11:17)等待的業(yè)務(wù)受理的顧客有35位,請(qǐng)排號(hào)辦理業(yè)務(wù)!

Process finished with exit code 0

 

注意,這個(gè)參數(shù)索引時(shí){0}{9}的非負(fù)整數(shù),多了不認(rèn)!

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多