天天看點

MessageFormat對象實作格式化字元串輸出,類似C#中的string.format方法

      早在尋找java中類似string .format(str,args...)的方法來格式化字元串,前段時間在網上見過,确信有這種方法,但沒有太注意!今天 在寫代碼中,突然要用到這個功能(友善的多),但一時想不起來,但經過一番折騰,終于找到了,如下:    MessageFormate   

     因為工作的原因,經常使用C#,對于C#的String.Format()方法非常喜歡,能夠格式化字元串,省掉了拼接字元串的煩惱,因而在想在java中有沒有一個類似的功能呢?

早就知道Java有SimpleDateFormat這個類,可以格式化日期,檢視Java API知道DateFormat 是SimpleDateFormat的父類,再追查下去,又發現DateFormat 的父類是java.text.Format

,而java.text.Format還有幾個子類,其中一個就是java.text.MessageFormat,Java API對其描述如下:MessageFormate

public class MessageFormatextends Format MessageFormat 提供了以與語言無關方式生成連接配接消息的方式。使用此方法構造向終端使用者顯示的消息。

MessageFormat 擷取一組對象,格式化這些對象,然後将格式化後的字元串插入到模式中的适當位置。

注:MessageFormat 不同于其他 Format 類,因為 MessageFormat 對象是用其構造方法之一建立的(而不是使用 getInstance 樣式的工廠方法建立的)。工廠方法不是必需的,因為 MessageFormat 本身不實作特定于語言環境的行為。特定于語言環境的行為是由所提供的模式和用于已插入參數的子格式來定義的。

不管那麼多,先試試再說吧。

第一個例子:

String item_ds="<input type=/"radio/" value=/"{0}/" name=/"{1}/" />{2}";

String temp=MessageFormat.format(item_ds, value,this.id+"group",text);

輸出為:

<input type="radio" value="1" name="IMG7008CA8DB3DD42E08D322B1358D15093group" />黃修群

 還不過瘾?我再來兩個:System.out.println (MessageFormat.format("Today is {0}",new Date()));  System.out.println (MessageFormat.format("My age is {0},I was borm at {1}.",26,1979));輸出結果為:Today is 06-10-15 下午8:34My age is 26,I was borm at 1,979.(注意,我沒有控制年份輸出,是以按照西方的習慣1979程式設計了1,979了)。第二個方法用到了public static String format(String pattern,Object... arguments)這個方法,後面接受可變參數,不過有些疑惑的是它接受的是Object類型的參數,而我這裡不是Object類型的參數,Java自動将其封裝稱它對應的資料類型,是不是很爽?