JavaTM 2 Platform
Standard Ed. 6

java.text
類別 ChoiceFormat

java.lang.Object
  繼承者 java.text.Format
      繼承者 java.text.NumberFormat
          繼承者 java.text.ChoiceFormat
所有已實作的介面:
Serializable, Cloneable

public class ChoiceFormat
extends NumberFormat

ChoiceFormat 允許將格式應用到某個範圍的數。它通常用於在 MessageFormat 中處理複數。使用按升序排列的 double 列表指定 choice,列表中每一項都指定一個到下一項的半開區間:

當且僅當 limit[j] <= X < limit[j+1] 時,X 比對 j
 
如果不比對,則根據數 (X) 的是太小還是太大,選擇使用第一個或最後一個索引。如果 limit 陣列不按升序排列,則格式化的結果將不正確。ChoiceFormat 還接受 \u221E(等同於無窮大 (INF))。

註:ChoiceFormat 不同於其他 Format 類別,因為 ChoiceFormat 物件是通過建構子創建的(而不是通過 getInstance 樣式處理器方法)。處理器方法不是必需的,因為 ChoiceFormat 不要求針對給定語言環境進行任何複雜的設置。事實上,ChoiceFormat 並不實作任何特定於語言環境的行為。

創建 ChoiceFormat 時,必須指定一個 format 陣列和一個 limit 陣列。這些陣列的長度必須相同。例如,

以下是一個顯示格式化和解析的簡單例子:

 double[] limits = {1,2,3,4,5,6,7};
 String[] dayOfWeekNames = {"Sun","Mon","Tue","Wed","Thur","Fri","Sat"};
 ChoiceFormat form = new ChoiceFormat(limits, dayOfWeekNames);
 ParsePosition status = new ParsePosition(0);
 for (double i = 0.0; i <= 8.0; ++i) {
     status.setIndex(0);
     System.out.println(i + " -> " + form.format(i) + " -> "
                              + form.parse(form.format(i),status));
 }
 
以下是一個較複雜的帶網要格式的例子:
 double[] filelimits = {0,1,2};
 String[] filepart = {"are no files","is one file","are {2} files"};
 ChoiceFormat fileform = new ChoiceFormat(filelimits, filepart);
 Format[] testFormats = {fileform, null, NumberFormat.getInstance()};
 MessageFormat pattform = new MessageFormat("There {0} on {1}");
 pattform.setFormats(testFormats);
 Object[] testArgs = {null, "ADisk", null};
 for (int i = 0; i < 4; ++i) {
     testArgs[0] = new Integer(i);
     testArgs[2] = testArgs[0];
     System.out.println(pattform.format(testArgs));
 }
 

為 ChoiceFormat 物件指定一個網要是相當直接的。例如:

 ChoiceFormat fmt = new ChoiceFormat(
      "-1#is negative| 0#is zero or fraction | 1#is one |1.0<is 1+ |2#is two |2<is more than 2.");
 System.out.println("Formatter Pattern : " + fmt.toPattern());

 System.out.println("Format with -INF : " + fmt.format(Double.NEGATIVE_INFINITY));
 System.out.println("Format with -1.0 : " + fmt.format(-1.0));
 System.out.println("Format with 0 : " + fmt.format(0));
 System.out.println("Format with 0.9 : " + fmt.format(0.9));
 System.out.println("Format with 1.0 : " + fmt.format(1));
 System.out.println("Format with 1.5 : " + fmt.format(1.5));
 System.out.println("Format with 2 : " + fmt.format(2));
 System.out.println("Format with 2.1 : " + fmt.format(2.1));
 System.out.println("Format with NaN : " + fmt.format(Double.NaN));
 System.out.println("Format with +INF : " + fmt.format(Double.POSITIVE_INFINITY));
 
輸出結果類似如下:
 
Format with -INF : is negative Format with -1.0 : is negative Format with 0 : is zero or fraction Format with 0.9 : is zero or fraction Format with 1.0 : is one Format with 1.5 : is 1+ Format with 2 : is two Format with 2.1 : is more than 2. Format with NaN : is negative Format with +INF : is more than 2.

Synchronization

Choice 格式不是同步的。建議為每個執行緒創建單獨的格式實例。如果多個執行緒共時存取一個格式,則它必須保持外部同步。

另請參見:
DecimalFormat, MessageFormat, 序列化表格

巢狀類別摘要
 
從類別 java.text.NumberFormat 繼承的巢狀類別/介面
NumberFormat.Field
 
欄位摘要
 
從類別 java.text.NumberFormat 繼承的欄位
FRACTION_FIELD, INTEGER_FIELD
 
建構子摘要
ChoiceFormat(double[] limits, String[] formats)
          根據 limit 和相應的 format 建構。
ChoiceFormat(String newPattern)
          根據 limit 和相應的 format(基於網要)建構。
 
方法摘要
 void applyPattern(String newPattern)
          設置網要。
 Object clone()
          覆寫 Cloneable
 boolean equals(Object obj)
          兩個物件之間的相等性比較。
 StringBuffer format(double number, StringBuffer toAppendTo, FieldPosition status)
          返回帶已格式化 double 的網要。
 StringBuffer format(long number, StringBuffer toAppendTo, FieldPosition status)
          特殊格式。
 Object[] getFormats()
          獲取傳入建構子的 format。
 double[] getLimits()
          獲取傳入建構子的 limit。
 int hashCode()
          為訊息格式物件產生雜湊碼。
static double nextDouble(double d)
          尋找大於 d 的最小 double 值。
static double nextDouble(double d, boolean positive)
          尋找大於 d 的最小 double 值(如果 positive == true),或者小於 d 的最大值(如果 positive == false)。
 Number parse(String text, ParsePosition status)
          解析輸入文本中的一個 Number。
static double previousDouble(double d)
          尋找小於 d 的最大 double 值。
 void setChoices(double[] limits, String[] formats)
          設置要在格式化中使用的 choice。
 String toPattern()
          獲取網要。
 
從類別 java.text.NumberFormat 繼承的方法
format, format, format, getAvailableLocales, getCurrency, getCurrencyInstance, getCurrencyInstance, getInstance, getInstance, getIntegerInstance, getIntegerInstance, getMaximumFractionDigits, getMaximumIntegerDigits, getMinimumFractionDigits, getMinimumIntegerDigits, getNumberInstance, getNumberInstance, getPercentInstance, getPercentInstance, getRoundingMode, isGroupingUsed, isParseIntegerOnly, parse, parseObject, setCurrency, setGroupingUsed, setMaximumFractionDigits, setMaximumIntegerDigits, setMinimumFractionDigits, setMinimumIntegerDigits, setParseIntegerOnly, setRoundingMode
 
從類別 java.text.Format 繼承的方法
format, formatToCharacterIterator, parseObject
 
從類別 java.lang.Object 繼承的方法
finalize, getClass, notify, notifyAll, toString, wait, wait, wait
 

建構子詳細資訊

ChoiceFormat

public ChoiceFormat(String newPattern)
根據 limit 和相應的 format(基於網要)建構。

另請參見:
applyPattern(java.lang.String)

ChoiceFormat

public ChoiceFormat(double[] limits,
                    String[] formats)
根據 limit 和相應的 format 建構。

另請參見:
setChoices(double[], java.lang.String[])
方法詳細資訊

applyPattern

public void applyPattern(String newPattern)
設置網要。

參數:
newPattern - 參見類別描述。

toPattern

public String toPattern()
獲取網要。


setChoices

public void setChoices(double[] limits,
                       String[] formats)
設置要在格式化中使用的 choice。

參數:
limits - 套件含要使用該格式進行解析的最大值,應該按升序排列。格式化 X 時,如果 limit[i] <= X < limit[i+1],則 choice 為 i。如果 limit 陣列不按升序排列,則格式化的結果將不正確。
formats - 要為每個 limit 使用的格式。格式可以是 Format 物件或 String。用物件 Y 格式化時,如果該物件是一個 NumberFormat,則調用 ((NumberFormat) Y).format(X)。否則調用 Y.toString()。

getLimits

public double[] getLimits()
獲取傳入建構子的 limit。

返回:
limit。

getFormats

public Object[] getFormats()
獲取傳入建構子的 format。

返回:
format。

format

public StringBuffer format(long number,
                           StringBuffer toAppendTo,
                           FieldPosition status)
特殊格式。此方法真正調用 format(double, StringBuffer, FieldPosition),這樣,受支持的 long 範圍只等於 double 存儲的範圍。這不是一個實用的限制。

指定者:
類別 NumberFormat 中的 format
另請參見:
Format.format(java.lang.Object)

format

public StringBuffer format(double number,
                           StringBuffer toAppendTo,
                           FieldPosition status)
返回帶已格式化 double 的網要。

指定者:
類別 NumberFormat 中的 format
參數:
number - 要格式化或替換的數。
toAppendTo - 將文本添加到的地方。
status - 忽略,無有用的狀態返回。
另請參見:
Format.format(java.lang.Object)

parse

public Number parse(String text,
                    ParsePosition status)
解析輸入文本中的一個 Number。

指定者:
類別 NumberFormat 中的 parse
參數:
text - 源文本。
status - 一個輸入輸出參數。輸入時,status.index 欄位指示應該解析的源文本中的第一個字元。退出時,如果沒有發生錯誤,則將 status.index 設置為源文本中第一個未解析的字元。退出時,如果發生了錯誤,則 status.index 保持不變,將 status.errorIndex 設置為引起解析失敗的第一個字元的索引。
返回:
一個表示已解析數值的 Number。
另請參見:
NumberFormat.isParseIntegerOnly(), Format.parseObject(java.lang.String, java.text.ParsePosition)

nextDouble

public static final double nextDouble(double d)
尋找大於 d 的最小 double 值。如果為 NaN,則返回相同的值。

用於形成半開區間。

另請參見:
previousDouble(double)

previousDouble

public static final double previousDouble(double d)
尋找小於 d 的最大 double 值。如果為 NaN,則返回相同的值。

另請參見:
nextDouble(double)

clone

public Object clone()
覆寫 Cloneable

覆寫:
類別 NumberFormat 中的 clone
返回:
此實例的一個副本。
另請參見:
Cloneable

hashCode

public int hashCode()
為訊息格式物件產生雜湊碼。

覆寫:
類別 NumberFormat 中的 hashCode
返回:
此物件的一個雜湊碼值。
另請參見:
Object.equals(java.lang.Object), Hashtable

equals

public boolean equals(Object obj)
兩個物件之間的相等性比較。

覆寫:
類別 NumberFormat 中的 equals
參數:
obj - 要與之比較的參考物件。
返回:
如果此物件與 obj 參數相同,則返回 true;否則返回 false
另請參見:
Object.hashCode(), Hashtable

nextDouble

public static double nextDouble(double d,
                                boolean positive)
尋找大於 d 的最小 double 值(如果 positive == true),或者小於 d 的最大值(如果 positive == false)。如果為 NaN,則返回相同的值。 如果這些成員函數不調用以下方法,就不會影響浮點標誌: Double.longBitsToDouble(long) Double.doubleToLongBits(double) Double.isNaN(double)


JavaTM 2 Platform
Standard Ed. 6

提交錯誤或意見

版權所有 2008 Sun Microsystems, Inc. 保留所有權利。請遵守GNU General Public License, version 2 only