Module  java.base
软件包  java.text

Class ChoiceFormat

  • All Implemented Interfaces:
    SerializableCloneable


    public class ChoiceFormat
    extends NumberFormat
    A 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}
      格式 = {“太阳”,“星期一”,“星期二”,“星期三”,“星期三”,“星期五”,“星期六”
    • 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
    • 构造方法详细信息

      • ChoiceFormat

        public ChoiceFormat​(String newPattern)
        基于模式的限制和相应格式的构造。
        参数
        newPattern - 新的模式字符串
        异常
        NullPointerExcpetion - 如果 newPatternnull
        另请参见:
        applyPattern(java.lang.String)
    • 方法详细信息

      • 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 - 是您要为每个限制使用的格式。 它们可以是格式对象或字符串。 当使用对象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)因此所支持的longs的范围只等于可以通过double存储的范围。 这绝对不是实际的限制。
        Specified by:
        format中的 NumberFormat
        参数
        number - 长数字格式
        toAppendTo - 要附加格式化文本的StringBuffer
        status - 字段位置
        结果
        格式化的StringBuffer
        另请参见:
        Format.format(java.lang.Object)
      • parse

        public Number parse​(String text,
                            ParsePosition status)
        从输入文本中解析一个数字。
        Specified by:
        parseNumberFormat
        参数
        text - 源文本。
        status - 输入 - 输出参数。 在输入上,status.index字段指示应解析的源文本的第一个字符。 退出时,如果没有发生错误,则将status.index设置为源文本中的第一个未解析的字符。 退出时,如果发生错误,则status.index不变,并将status.errorIndex设置为导致解析失败的字符的第一个索引。
        结果
        一个表示解析数值的数字。
        异常
        NullPointerException - 如果 statusnulltextnull ,选择字符串列表不为空。
        另请参见:
        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 如果是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
        结果
        最小或更大的双重值