模块  java.base
软件包  java.text

Class ChoiceFormat

  • 实现的所有接口
    SerializableCloneable

    public class ChoiceFormatextends NumberFormat
    ChoiceFormat允许您将格式附加到一系列数字。 它通常用于MessageFormat以处理复数形式。 使用升序的双精度列表指定选项,其中每个项指定直到下一项的半开区间:
     X matches j if and only if limit[j] ≤ X < limit[j+1] 
    如果没有匹配,则使用第一个或最后一个索引,具体取决于数字(X)是太低还是太高。 如果限制数组不按升序排列,则格式化结果将不正确。 ChoiceFormat也接受\u221E等同于无穷大(INF)。

    注意: ChoiceFormat与其他Format类的不同之处在于,您使用构造函数(不使用getInstance样式工厂方法)创建ChoiceFormat对象。 工厂方法不是必需的,因为ChoiceFormat对于给定的语言环境不需要任何复杂的设置。 实际上, ChoiceFormat没有实现任何特定于语言环境的行为。

    创建ChoiceFormat ,必须指定格式数组和限制数组。 这些数组的长度必须相同。 例如,

    • 限制 = {1,2,3,4,5,6,7}
      formats = {“Sun”,“Mon”,“Tue”,“Wed”,“Thur”,“Fri”,“Sat”}
    • limits = {0,1,ChoiceFormat.nextDouble(1)}
      formats = {“no files”,“one file”,“many files”}
      nextDouble可用于获得下一个更高的双倍,以使半开区间。)

    这是一个显示格式和解析的简单示例:

     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

    选择格式不同步。 建议为每个线程创建单独的格式实例。 如果多个线程同时访问格式,则必须在外部进行同步。

    从以下版本开始:
    1.1
    另请参见:
    DecimalFormatMessageFormatSerialized Form
    • 方法详细信息

      • applyPattern

        public void applyPattern​(String newPattern)
        设置模式。
        参数
        newPattern - 请参阅课程说明。
        异常
        NullPointerException - 如果 newPatternnull
      • toPattern

        public String toPattern()
        获取模式。
        结果
        模式字符串
      • setChoices

        public void setChoices​(double[] limits,                       String[] formats)
        设置要在格式化中使用的选项。
        参数
        limits - 包含要使用该格式解析的顶部值,并且应按升序排序。 格式化X时,选择将是i,其中limit [i]≤X<limit [i + 1]。 如果限制数组不按升序排列,则格式化结果将不正确。
        formats - 您要为每个限制使用的格式。 它们可以是Format对象或字符串。 使用对象Y格式化时,如果对象是NumberFormat,则调用((NumberFormat)Y).format(X)。 否则调用Y.toString()。
        异常
        NullPointerException - 如果 limitsformatsnull
      • getLimits

        public double[] getLimits()
        获取构造函数中传递的限制。
        结果
        极限。
      • getFormats

        public Object[] getFormats()
        获取构造函数中传递的格式。
        结果
        格式。
      • format

        public StringBuffer format​(long number,                           StringBuffer toAppendTo,                           FieldPosition status)
        格式专业化。 此方法实际上调用format(double, StringBuffer, FieldPosition)因此支持的long的范围仅等于double可以存储的范围。 这绝不是一个实际的限制。
        Specified by:
        format在课程 NumberFormat
        参数
        number - 要格式化的长数字
        toAppendTo - 要附加格式化文本的StringBuffer
        status - 跟踪返回字符串中字段的位置。 例如,要格式化Locale.US语言环境中的数字123456789 ,如果给定的fieldPositionNumberFormat.INTEGER_FIELD ,则对于输出字符串123,456,789 ,开始索引和结束索引fieldPosition将分别设置为0和11。
        结果
        格式化的StringBuffer
        另请参见:
        Format.format(java.lang.Object)
      • parse

        public Number parse​(String text,                    ParsePosition status)
        从输入文本中解析数字。
        Specified by:
        parse在课程 NumberFormat
        参数
        text - 源文本。
        status - 输入输出参数。 在输入时,status.index字段指示应解析的源文本的第一个字符。 退出时,如果没有发生错误,则status.index设置为源文本中第一个未解析的字符。 退出时,如果确实发生了错误,则status.index保持不变,并且status.errorIndex设置为导致解析失败的字符的第一个索引。
        结果
        一个数字,表示已解析的数字的值。
        异常
        NullPointerException - 如果 statusnull或者如果 textnull并且选择字符串列表不为空。
        另请参见:
        NumberFormat.isParseIntegerOnly()Format.parseObject(java.lang.String, java.text.ParsePosition)
      • nextDouble

        public static final double nextDouble​(double d)
        找到最大双倍大于d 如果是NaN ,则返回相同的值。

        用于半开间隔。

        参数
        d - 参考值
        结果
        d双倍价值
        另请参见:
        previousDouble(double)
      • previousDouble

        public static final double previousDouble​(double d)
        找到d双倍小于d 如果是NaN ,则返回相同的值。
        参数
        d - 参考值
        结果
        最大双值小于 d
        另请参见:
        nextDouble(double)
      • equals

        public boolean equals​(Object obj)
        两者之间的平等比较
        重写:
        equals ,课程 NumberFormat
        参数
        obj - 要与之比较的引用对象。
        结果
        true如果此对象与obj参数相同; 否则为false
        另请参见:
        Object.hashCode()HashMap
      • nextDouble

        public static double nextDouble​(double d,                                boolean positive)
        发现最小双倍大于d (如果positivetrue ),或最大双重小于d (如果positivefalse )。 如果是NaN ,则返回相同的值。 不影响浮点标志,前提是这些成员函数不会:Double.longBitsToDouble(long)Double.doubleToLongBits(double)Double.isNaN(double)
        参数
        d - 参考值
        positive - true如果需要最少的两倍; 否则为false
        结果
        最小或更大的双重值