1. 程式人生 > >java 格式化輸出

java 格式化輸出

一、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;

/**
* Formatter測試
*
* @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);
                //格式化輸出字串和數字

                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

總結: 1、java.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



3、String.format()、System.out.printf()方法底層也是通過此類方法呼叫實現的。 4、Calendar類用來表示系統抽象時間,是日期格式化等操作中最重要的一個類,這個類的例項化方式是: Calendar rightNow = Calendar.getInstance(); 並且可以通過下面的方法改變例項所表示的抽象時間:  void setTime(Date date)

          使用給定的 Date 設定此 Calendar 的時間。

 void setTimeInMillis(long millis)

          用給定的 long 值設定此 Calendar 的當前時間值。

  有關日期的格式化還比較複雜,不光與現實方式有關,其實還與時區、國家習慣等等有關,因此在處理日期格式化問題上一定要慎重對待,沒有理由不用專門的類做處理。 二、java.text.Format Format 是一個用於格式化語言環境敏感的資訊(如日期、訊息和數字)的抽象基類。 光從類的層次結構上看,Java對格式的處理也算費了大勁了,但還是不怎麼好用。 訊息格式化類比較讓人鬱悶,SUN的API文件看起來好像翻譯的有毛病。

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 = "歡迎光臨,當前({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