日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

Java魔法堂:初探MessageFormat.format和ChoiceFormat

發布時間:2024/7/19 java 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java魔法堂:初探MessageFormat.format和ChoiceFormat 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、前言                              

? 剛開始從.net的轉向java的時候總覺得?String.format?用得不習慣,希望格式模版會這樣?{0}, this is {1}'s cat.{1},this is {0}'s?dog.?而不是?%1$s,this is %2$s's cat.%2$s,this is %1$s's dog.?。后來發現?java.text.MessageFormat.format?可以滿足我這個小小的愿望。

?

二、靜態方法?java.text.MessageFormat.format?             ?  

? 方法定義:

String MessageFormat.format(String fmt, Object...args)

? 入參fmt為MessageFormat模式參數。

?

三、MessageFormat模式                     ?

? 格式:??ArgumentIndex[,FormatType[,FormatStyle]]?

??ArgumentIndex?,是從0開始的入參位置索引。

??FormatType?,指定使用不同的Format子類對入參進行格式化處理。值范圍如下:

? ? ?number:調用NumberFormat進行格式化

? ? ?date:調用DateFormat進行格式化

? ? ?time:調用DateFormat進行格式化

? ? ?choice:調用ChoiceFormat進行格式化

??FormatType?,設置FormatType中使用的格式化樣式。值范圍如下:

? ? short,medium,long,full,integer,currency,percent,SubformPattern(子格式模式,形如#.##)

? 注意:?FormatType?和?FormatStyle?主要用于對日期時間、數字、百分比等進行格式化。

? 示例——將數字1.23格式為1.2:

double num = 1.23; String str = MessageFormat.format("{0,number,#.#}", num);

?

四、MessageFormat注意點                    

? 1. 兩個單引號才表示一個單引號,僅寫一個單引號將被忽略。

? 2.?單引號會使其后面的占位符均失效,導致直接輸出占位符。

MessageFormat.format("{0}{1}", 1, 2); // 結果12 MessageFormat.format("'{0}{1}", 1, 2); // 結果{0}{1} MessageFormat.format("'{0}'{1}", 1, 2); // 結果{0}

因此可以用于輸出左花括號(單寫左花括號會報錯,而單寫右花括號將正常輸出)

MessageFormat.format("'{'{0}}", 2); // 結果{2

因此前言中的示例應該寫為

{0}, this is {1}''s cat.{1},this is {0}''s dog.

?

五、類層級關系                                

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?|-- java.text.MessageFormat

頂層抽象類java.text.Format—| ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? |--java.text.ChoiceFormat

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?|--java.text.NumberFormat—|

               |              ?|--java.text.DecimalFormat

               |

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?|--java.text.DateFormat—java.text.SimpleDateFormat

? ?1. DecimalFormat

? ? ? ?用于格式化十進制實數。通過格式字符串來自定義格式化類型,舍入方式為half-even(四舍五入)。

? ? ? ?格式化模式:?正數子模式;負數子模式?,如?0.00;-0.00?,簡寫為?0.00?。

? ? ? ?模式中的占位符:

    ?0?,代表該為位為數字,若不存在則用0填充

?   ? ???#?,代表該為位為數字

    ?,?,代表分隔符, 如模式為?#,#?,那么格式化10時會返回1,0

? ?2. ChoiceFormat

?   相當于以數字為鍵,字符串為值的鍵值對。分別使用一組double類型的數組作為鍵,一組String類型的數組作為值,兩數組相同索引值的元素作為一對。

? ? 示例——基本用法

double[] limit = {0,1,3}; String[] format = {"hello0", "hello1", "hello3"}; ChoiceFormat cf = new ChoiceFormat(limit, format); for(int i = 0; i < 4; ++i){System.out.println(cf.format(i)); } /* 輸出* hello0* hello1* hello0* hello3*/

? ?注意:當找不到對應的鍵值對時,則使用第一或最后一對鍵值對。

? ?示例——結合MessageFormat使用

double[] limit = {0, 1}; String[] format = {"Hello0", "Hello1{1}"}; ChoiceFormat cf = new ChoiceFormat(limit, format); MessageFormat mf = new MessageFormat("{0}"); mf.setFormatByArgumentIndex(0, cf); for (int i = 0; i < 2; ++i){System.out.println(mf.format(new Object[]{new Integer(i), new Integer(i+1)})); } /* 輸出* Hello0* Hello12*/

?

六、性能問題                                 ?

? 由于靜態方法?MessageFormat.format?內部是

public static String format(String pattern, Object ... arguments) { MessageFormat temp = new MessageFormat(pattern); return temp.format(arguments); }

? 因此若要多次格式同一個模式的字符串,那么創建一個MessageFormat實例在執行格式化操作比較好些。

?

七、總結                                  

? 對于簡單的格式化或字符串組裝,?MessageFormat.format方法?使用更方便些,但要格式化處理更豐富的話要是用?String.format方法?吧!??

? 尊重原創,轉載請注明來自:http://www.cnblogs.com/fsjohnhuang/p/4095059.html? ^_^肥仔John ?

?

八、參考                                  

??http://zqc-0101.iteye.com/blog/114014

?

轉載于:https://www.cnblogs.com/fsjohnhuang/p/4095059.html

總結

以上是生活随笔為你收集整理的Java魔法堂:初探MessageFormat.format和ChoiceFormat的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。