- 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
在阿拉伯语上下文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 / toNumericShaper.ARABIC
。 如果指定了任何不可映射的范围值,例如NumericShaper.Range.BALINESE
,则忽略这些范围。十进制数字优先级
Unicode范围可能包含多个十进制数字集。 如果为同一Unicode范围指定了多个十进制数字集,则其中一个集将优先如下。
NumericShaper constants precedence Unicode RangeNumericShaper
Constants Precedence ArabicNumericShaper.ARABIC
NumericShaper.EASTERN_ARABIC
NumericShaper.EASTERN_ARABIC
NumericShaper.Range.ARABIC
NumericShaper.Range.EASTERN_ARABIC
NumericShaper.Range.EASTERN_ARABIC
Tai ThamNumericShaper.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范围和十进制基数。
-
方法摘要
所有方法 静态方法 实例方法 具体的方法 变量和类型 方法 描述 boolean
equals(Object o)
如果指定的对象是NumericShaper
的实例并且形状与此实例完全相同,则返回true
,无论范围表示,位掩码还是枚举。static NumericShaper
getContextualShaper(int ranges)
返回所提供的unicode范围的上下文整形器。static NumericShaper
getContextualShaper(int ranges, int defaultContext)
返回所提供的unicode范围的上下文整形器。static NumericShaper
getContextualShaper(Set<NumericShaper.Range> ranges)
返回所提供的Unicode范围的上下文整形器。static NumericShaper
getContextualShaper(Set<NumericShaper.Range> ranges, NumericShaper.Range defaultContext)
返回所提供的Unicode范围的上下文整形器。int
getRanges()
返回一个int
,它将要形成的所有范围的值进行ORint
。Set<NumericShaper.Range>
getRangeSet()
返回一个Set
表示将要形成的此NumericShaper
中的所有Unicode范围。static NumericShaper
getShaper(int singleRange)
返回所提供的unicode范围的整形器。static NumericShaper
getShaper(NumericShaper.Range singleRange)
返回提供的Unicode范围的整形器。int
hashCode()
返回此整形器的哈希码。boolean
isContextual()
返回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
转换start
和start + count
之间出现的文本中的数字。String
toString()
返回描述此整形器的String
。
-
-
-
字段详细信息
-
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
- 如果singleRange
是null
- 从以下版本开始:
- 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
- 如果ranges
是null
。 - 从以下版本开始:
- 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
- 如果ranges
或defaultContext
是null
- 从以下版本开始:
- 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
转换start
和start + count
之间出现的文本中的数字。 如果整形器不是上下文整形器,则忽略Context
。- 参数
-
text
- 数据char
-
start
- 转换为text
的索引 -
count
-char
中的text
的转换数量 -
context
- 要转换字符的上下文,例如NumericShaper.Range.EUROPEAN
- 异常
-
IndexOutOfBoundsException
- 如果start
或start + count
超出范围 -
NullPointerException
- 如果text
或context
为空 - 从以下版本开始:
- 1.7
-
isContextual
public boolean isContextual()
返回boolean
指示此整形器是否在上下文中形状。- 结果
-
true
如果这个整形器是上下文的; 否则为false
。
-
getRanges
public int getRanges()
返回一个int
,它将所有要成形的范围的值进行ORint
。例如,要检查整形器是否形状为阿拉伯语,您将使用以下内容:
if ((shaper.getRanges() & shaper.ARABIC) != 0) { ...
请注意,此方法仅支持基于位掩码的范围。 致电
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)
-
-