模块  java.desktop
软件包  java.awt.font

Class NumericShaper

  • 实现的所有接口
    Serializable

    public final class NumericShaper
    extends Object
    implements Serializable
    NumericShaper类用于将Latin-1(欧洲)数字转换为其他Unicode十进制数字。 此类用户主要是希望使用国家数字形状显示数据的人,但发现使用Latin-1(欧洲)数字在内部表示数据更方便。 这不解释已弃用的数字形状选择器字符(U + 206E)。

    实例NumericShaper通常作为属性应用于TextAttribute类的NUMERIC_SHAPING属性的文本。 例如,此代码段会导致TextLayout在阿拉伯语上下文TextLayout欧洲数字形成为阿拉伯语:

     Map map = new HashMap();
     map.put(TextAttribute.NUMERIC_SHAPING,
         NumericShaper.getContextualShaper(NumericShaper.ARABIC));
     FontRenderContext frc = ...;
     TextLayout layout = new TextLayout(text, map, frc);
     layout.draw(g2d, x, y);
     

    也可以使用NumericShaper实例显式执行数字整形,因为此代码片段演示了:
     char[] text = ...;
     // shape all EUROPEAN digits (except zero) to ARABIC digits
     NumericShaper shaper = NumericShaper.getShaper(NumericShaper.ARABIC);
     shaper.shape(text, start, count);
    
     // shape European digits to ARABIC digits if preceding text is Arabic, or
     // shape European digits to TAMIL digits if preceding text is Tamil, or
     // leave European digits alone if there is no preceding text, or
     // preceding text is neither Arabic nor Tamil
     NumericShaper shaper =
         NumericShaper.getContextualShaper(NumericShaper.ARABIC |
                                             NumericShaper.TAMIL,
                                           NumericShaper.EUROPEAN);
     shaper.shape(text, start, count);
     

    基于位掩码和枚举的Unicode范围

    此类支持两种不同的编程接口来表示特定于脚本的数字的Unicode范围:基于位掩码的数字(如NumericShaper.ARABIC )和基于枚举的数字(如NumericShaper.Range.ARABIC ORing位掩码的常量可以指定多个范围,例如:

     NumericShaper.ARABIC | NumericShaper.TAMIL
     
    或使用NumericShaper.Range常量创建Set ,例如:
     EnumSet.of(NumericShaper.Range.ARABIC, NumericShaper.Range.TAMIL)
     
    基于枚举的范围是基于位掩码的超集。

    如果两个接口是混合的(包括序列化),则Unicode范围值将映射到可能进行此类映射的对应项,例如NumericShaper.Range.ARABIC from / to NumericShaper.ARABIC 如果指定了任何不可映射的范围值,例如NumericShaper.Range.BALINESE ,则忽略这些范围。

    十进制数字优先级

    Unicode范围可能包含多个十进制数字集。 如果为同一Unicode范围指定了多个十进制数字集,则其中一个集将优先如下。

    NumericShaper constants precedence Unicode Range NumericShaper Constants Precedence Arabic NumericShaper.ARABIC
    NumericShaper.EASTERN_ARABIC NumericShaper.EASTERN_ARABIC NumericShaper.Range.ARABIC
    NumericShaper.Range.EASTERN_ARABIC NumericShaper.Range.EASTERN_ARABIC Tai Tham NumericShaper.Range.TAI_THAM_HORA
    NumericShaper.Range.TAI_THAM_THAM NumericShaper.Range.TAI_THAM_THAM
    从以下版本开始:
    1.4
    另请参见:
    Serialized Form
    • 嵌套类汇总

      嵌套类  
      变量和类型 描述
      static class  NumericShaper.Range
      NumericShaper.Range表示具有其自己的十进制数字的Unicode范围。
    • 字段汇总

      字段  
      变量和类型 字段 描述
      static int ALL_RANGES
      标识所有范围,以进行完整的上下文整形。
      static int ARABIC
      标识ARABIC范围和十进制基数。
      static int BENGALI
      标识BENGALI范围和十进制基数。
      static int DEVANAGARI
      标识DEVANAGARI范围和十进制基数。
      static int EASTERN_ARABIC
      标识ARABIC范围和ARABIC_EXTENDED十进制基数。
      static int ETHIOPIC
      标识ETHIOPIC范围和十进制基数。
      static int EUROPEAN
      标识Latin-1(欧洲)和扩展范围,以及Latin-1(欧洲)十进制基数。
      static int GUJARATI
      标识GUJARATI范围和十进制基数。
      static int GURMUKHI
      标识GURMUKHI范围和十进制基数。
      static int KANNADA
      标识KANNADA范围和十进制基数。
      static int KHMER
      标识KHMER范围和十进制基数。
      static int LAO
      标识LAO范围和十进制基数。
      static int MALAYALAM
      标识MALAYALAM范围和十进制基数。
      static int MONGOLIAN
      标识MONGOLIAN范围和十进制基数。
      static int MYANMAR
      标识MYANMAR范围和十进制基数。
      static int ORIYA
      标识ORIYA范围和十进制基数。
      static int TAMIL
      标识TAMIL范围和十进制基数。
      static int TELUGU
      标识TELUGU范围和十进制基数。
      static int THAI
      标识THAI范围和十进制基数。
      static int TIBETAN
      标识TIBETAN范围和十进制基数。
    • 字段详细信息

      • EUROPEAN

        public static final int EUROPEAN
        标识Latin-1(欧洲)和扩展范围,以及Latin-1(欧洲)十进制基数。
        另请参见:
        常数字段值
      • ARABIC

        public static final int ARABIC
        标识ARABIC范围和十进制基数。
        另请参见:
        常数字段值
      • EASTERN_ARABIC

        public static final int EASTERN_ARABIC
        标识ARABIC范围和ARABIC_EXTENDED十进制基数。
        另请参见:
        常数字段值
      • DEVANAGARI

        public static final int DEVANAGARI
        标识DEVANAGARI范围和十进制基数。
        另请参见:
        常数字段值
      • BENGALI

        public static final int BENGALI
        标识BENGALI范围和十进制基数。
        另请参见:
        常数字段值
      • GURMUKHI

        public static final int GURMUKHI
        标识GURMUKHI范围和十进制基数。
        另请参见:
        常数字段值
      • GUJARATI

        public static final int GUJARATI
        标识GUJARATI范围和十进制基数。
        另请参见:
        常数字段值
      • ORIYA

        public static final int ORIYA
        标识ORIYA范围和十进制基数。
        另请参见:
        常数字段值
      • TAMIL

        public static final int TAMIL
        标识TAMIL范围和十进制基数。
        另请参见:
        常数字段值
      • TELUGU

        public static final int TELUGU
        标识TELUGU范围和十进制基数。
        另请参见:
        常数字段值
      • KANNADA

        public static final int KANNADA
        标识KANNADA范围和十进制基数。
        另请参见:
        常数字段值
      • MALAYALAM

        public static final int MALAYALAM
        标识MALAYALAM范围和十进制基数。
        另请参见:
        常数字段值
      • THAI

        public static final int THAI
        标识THAI范围和十进制基数。
        另请参见:
        常数字段值
      • LAO

        public static final int LAO
        标识LAO范围和十进制基数。
        另请参见:
        常数字段值
      • TIBETAN

        public static final int TIBETAN
        标识TIBETAN范围和十进制基数。
        另请参见:
        常数字段值
      • MYANMAR

        public static final int MYANMAR
        标识MYANMAR范围和十进制基数。
        另请参见:
        常数字段值
      • ETHIOPIC

        public static final int ETHIOPIC
        标识ETHIOPIC范围和十进制基数。
        另请参见:
        常数字段值
      • KHMER

        public static final int KHMER
        标识KHMER范围和十进制基数。
        另请参见:
        常数字段值
      • MONGOLIAN

        public static final int MONGOLIAN
        标识MONGOLIAN范围和十进制基数。
        另请参见:
        常数字段值
      • ALL_RANGES

        public static final int ALL_RANGES
        标识所有范围,以进行完整的上下文整形。

        此常量指定所有基于位掩码的范围。 使用EnumSet.allOf(NumericShaper.Range.class)指定所有基于枚举的范围。

        另请参见:
        常数字段值
    • 方法详细信息

      • getShaper

        public static NumericShaper getShaper​(int singleRange)
        返回所提供的unicode范围的整形器。 所有Latin-1(EUROPEAN)数字都将转换为相应的十进制unicode数字。
        参数
        singleRange - 指定的Unicode范围
        结果
        非上下文数字整形器
        异常
        IllegalArgumentException - 如果范围不是单个范围
      • getShaper

        public static NumericShaper getShaper​(NumericShaper.Range singleRange)
        返回提供的Unicode范围的整形器。 所有Latin-1(EUROPEAN)数字都将转换为指定Unicode范围的相应十进制数字。
        参数
        singleRange - 由NumericShaper.Range常量给出的Unicode范围。
        结果
        非上下文 NumericShaper
        异常
        NullPointerException - 如果 singleRangenull
        从以下版本开始:
        1.7
      • getContextualShaper

        public static NumericShaper getContextualShaper​(int ranges)
        返回所提供的unicode范围的上下文整形器。 如果范围是提供的范围之一,则Latin-1(EUROPEAN)数字将转换为与前一文本范围对应的十进制数字。 多个范围通过将这些值组合在一起来表示,例如, NumericShaper.ARABIC | NumericShaper.THAI 整形器假定EUROPEAN为起始上下文,也就是说,如果在字符串中的任何强方向文本之前遇到EUROPEAN数字,则上下文被假定为EUROPEAN,因此数字将不会形成。
        参数
        ranges - 指定的Unicode范围
        结果
        指定范围的整形器
      • getContextualShaper

        public static NumericShaper getContextualShaper​(Set<NumericShaper.Range> ranges)
        返回所提供的Unicode范围的上下文整形器。 如果范围是提供的范围之一,则Latin-1(EUROPEAN)数字将转换为与前一文本范围对应的十进制数字。

        整形器假定EUROPEAN为起始上下文,也就是说,如果在字符串中的任何强方向文本之前遇到EUROPEAN数字,则上下文被假定为EUROPEAN,因此数字将不会形成。

        参数
        ranges - 指定的Unicode范围
        结果
        指定范围的上下文整形器
        异常
        NullPointerException - 如果 rangesnull
        从以下版本开始:
        1.7
      • getContextualShaper

        public static NumericShaper getContextualShaper​(int ranges,
                                                        int defaultContext)
        返回所提供的unicode范围的上下文整形器。 如果范围是提供的范围之一,则Latin-1(EUROPEAN)数字将转换为与前一文本范围对应的十进制数字。 多个范围通过将这些值组合在一起来表示,例如, NumericShaper.ARABIC | NumericShaper.THAI 整形器使用defaultContext作为起始上下文。
        参数
        ranges - 指定的Unicode范围
        defaultContext - 起始上下文,例如 NumericShaper.EUROPEAN
        结果
        指定Unicode范围的整形器。
        异常
        IllegalArgumentException - 如果指定的 defaultContext不是单个有效范围。
      • getContextualShaper

        public static NumericShaper getContextualShaper​(Set<NumericShaper.Range> ranges,
                                                        NumericShaper.Range defaultContext)
        返回所提供的Unicode范围的上下文整形器。 如果范围是提供的范围之一,则Latin-1(EUROPEAN)数字将转换为与前一文本范围对应的十进制数字。 整形器使用defaultContext作为起始上下文。
        参数
        ranges - 指定的Unicode范围
        defaultContext - 起始上下文,例如 NumericShaper.Range.EUROPEAN
        结果
        指定Unicode范围的上下文整形器。
        异常
        NullPointerException - 如果 rangesdefaultContextnull
        从以下版本开始:
        1.7
      • shape

        public void shape​(char[] text,
                          int start,
                          int count)
        转换start和start + count之间出现的文本中的数字。
        参数
        text - 要转换的字符数组
        start - 开始转换为 text的索引
        count - 要转换的 text的字符数
        异常
        IndexOutOfBoundsException - 如果开始或开始+计数超出范围
        NullPointerException - 如果text为null
      • shape

        public void shape​(char[] text,
                          int start,
                          int count,
                          int context)
        使用提供的上下文转换start和start + count之间出现的文本中的数字。 如果整形器不是上下文整形器,则忽略上下文。
        参数
        text - 一个字符数组
        start - 转换为 text的索引
        count - 要转换的 text的字符数
        context - 要转换字符的上下文,例如 NumericShaper.EUROPEAN
        异常
        IndexOutOfBoundsException - 如果开始或开始+计数超出范围
        NullPointerException - 如果text为null
        IllegalArgumentException - 如果这是上下文整形器且指定的 context不是单个有效范围。
      • shape

        public void shape​(char[] text,
                          int start,
                          int count,
                          NumericShaper.Range context)
        使用提供的context转换startstart + count之间出现的文本中的数字。 如果整形器不是上下文整形器,则忽略Context
        参数
        text - 数据 char
        start - 转换为 text的索引
        count - char中的 text的转换数量
        context - 要转换字符的上下文,例如 NumericShaper.Range.EUROPEAN
        异常
        IndexOutOfBoundsException - 如果 startstart + count超出范围
        NullPointerException - 如果 textcontext为空
        从以下版本开始:
        1.7
      • isContextual

        public boolean isContextual()
        返回 boolean指示此整形器是否在上下文中形状。
        结果
        true如果这个整形器是上下文的; 否则为false
      • getRanges

        public int getRanges()
        返回一个int ,它将所有要成形的范围的值进行OR int

        例如,要检查整形器是否形状为阿拉伯语,您将使用以下内容:

        if ((shaper.getRanges() & shaper.ARABIC) != 0) &#123; ...

        请注意,此方法仅支持基于位掩码的范围。 致电getRangeSet()获取基于枚举的范围。

        结果
        要成形的所有范围的值。
      • getRangeSet

        public Set<NumericShaper.Range> getRangeSet()
        返回 Set代表所有的Unicode范围在此 NumericShaper将要成型。
        结果
        要塑造的所有Unicode范围。
        从以下版本开始:
        1.7
      • hashCode

        public int hashCode()
        返回此整形器的哈希码。
        重写:
        hashCode在课程 Object
        结果
        这个shaper的哈希码。
        另请参见:
        Object.hashCode()
      • equals

        public boolean equals​(Object o)
        如果指定的对象是NumericShaper的实例并且形状与此实例完全相同,则返回true ,无论范围表示,位掩码还是枚举。 例如,以下代码生成"true"
         NumericShaper ns1 = NumericShaper.getShaper(NumericShaper.ARABIC);
         NumericShaper ns2 = NumericShaper.getShaper(NumericShaper.Range.ARABIC);
         System.out.println(ns1.equals(ns2));
         
        重写:
        equals在课程 Object
        参数
        o - 要与此 NumericShaper进行比较的指定对象
        结果
        true如果o是实例NumericShaper个形状以同样的方式; 否则为false
        另请参见:
        Object.equals(java.lang.Object)
      • toString

        public String toString()
        返回描述此整形器的String 此方法仅用于调试目的。
        重写:
        toString在课程 Object
        结果
        描述这个整形器的 String