模块 java.desktop

类 NumericShaper

java.lang.Object
java.awt.font.NumericShaper
所有已实现的接口:
Serializable

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

NumericShaper 的实例通常作为属性应用于具有 TextAttribute 类的 NUMERIC_SHAPING 属性的文本。例如,此代码片段导致 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 常量优先级
Unicode 范围 NumericShaper 常量 优先级
阿拉伯 NumericShaper.ARABIC
NumericShaper.EASTERN_ARABIC
NumericShaper.EASTERN_ARABIC
NumericShaper.Range.ARABIC
NumericShaper.Range.EASTERN_ARABIC
NumericShaper.Range.EASTERN_ARABIC
大潭 NumericShaper.Range.TAI_THAM_HORA
NumericShaper.Range.TAI_THAM_THAM
NumericShaper.Range.TAI_THAM_THAM
自从:
1.4
参见:
  • 内部类总结

    内部类
    修饰符和类型
    描述
    static enum 
    NumericShaper.Range 表示具有自己的十进制数字的脚本的 Unicode 范围。
  • 字段摘要

    字段
    修饰符和类型
    Field
    描述
    static final int
    识别所有范围,以进行完整的上下文调整。
    static final int
    标识 ARABIC 范围和十进制基数。
    static final int
    标识 BENGALI 范围和十进制基数。
    static final int
    标识 DEVANAGARI 范围和十进制基数。
    static final int
    标识 ARABIC 范围和 ARABIC_EXTENDED 十进制基数。
    static final int
    标识 ETHIOPIC 范围和十进制基数。
    static final int
    标识 Latin-1(欧洲)和扩展范围,以及 Latin-1(欧洲)十进制基数。
    static final int
    标识 GUJARATI 范围和十进制基数。
    static final int
    标识 GURMUKHI 范围和十进制基数。
    static final int
    标识 KANNADA 范围和十进制基数。
    static final int
    标识 KHMER 范围和十进制基数。
    static final int
    标识 LAO 范围和十进制基数。
    static final int
    标识 MALAYALAM 范围和十进制基数。
    static final int
    标识 MONGOLIAN 范围和十进制基数。
    static final int
    标识 MYANMAR 范围和十进制基数。
    static final int
    标识 ORIYA 范围和十进制基数。
    static final int
    标识 TAMIL 范围和十进制基数。
    static final int
    标识 TELUGU 范围和十进制基数。
    static final int
    标识 THAI 范围和十进制基数。
    static final int
    标识 TIBETAN 范围和十进制基数。
  • 方法总结

    修饰符和类型
    方法
    描述
    boolean
    如果指定对象是 NumericShaper 的实例并且形状与此对象相同,则返回 true,无论范围表示、位掩码或枚举如何。
    getContextualShaper(int ranges)
    返回所提供的 unicode 范围的上下文整形器。
    getContextualShaper(int ranges, int defaultContext)
    返回所提供的 unicode 范围的上下文整形器。
    返回所提供的 Unicode 范围的上下文整形器。
    返回所提供的 Unicode 范围的上下文整形器。
    int
    返回一个 int,它将所有将被整形的范围的值组合在一起。
    返回一个 Set 表示此 NumericShaper 中将被整形的所有 Unicode 范围。
    getShaper(int singleRange)
    返回提供的 unicode 范围的整形器。
    返回所提供的 Unicode 范围的整形器。
    int
    返回此整形器的哈希码。
    boolean
    返回一个 boolean 指示此整形器是否根据上下文进行整形。
    void
    shape(char[] text, int start, int count)
    转换文本中出现在 start 和 start + count 之间的数字。
    void
    shape(char[] text, int start, int count, int context)
    使用提供的上下文转换文本中出现在 start 和 start + count 之间的数字。
    void
    shape(char[] text, int start, int count, NumericShaper.Range context)
    使用提供的 context 转换文本中出现在 startstart + count 之间的数字。
    返回描述此整形器的 String

    在类 java.lang.Object 中声明的方法

    clone, finalize, getClass, notify, notifyAll, wait, wait, wait
  • 字段详细信息

    • 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 - 如果 start 或 start + count 超出范围
      NullPointerException - 如果文本为空
    • shape

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

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

      public boolean isContextual()
      返回一个 boolean 指示此整形器是否根据上下文进行整形。
      返回:
      true 如果这个整形器是上下文相关的; false否则。
    • getRanges

      public int getRanges()
      返回一个 int,它将所有将被整形的范围的值组合在一起。

      例如,要检查整形器是否整形为阿拉伯语,您可以使用以下命令:

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

      请注意,此方法仅支持基于位掩码的范围。为基于枚举的范围调用 getRangeSet()

      返回:
      要整形的所有范围的值。
    • getRangeSet

      public Set <NumericShaper.Range > getRangeSet()
      返回一个 Set 表示此 NumericShaper 中将被整形的所有 Unicode 范围。
      返回:
      所有要整形的 Unicode 范围。
      自从:
      1.7
    • hashCode

      public int hashCode()
      返回此整形器的哈希码。
      重写:
      hashCode 在类 Object
      返回:
      这个整形器的哈希码。
      参见:
    • 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 如果 oNumericShaper 的一个实例并且形状相同; false否则。
      参见:
    • toString

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