java.lang.Object
java.awt.font.NumericShaper
- 所有实现的接口:
-
Serializable
NumericShaper
类用于将拉丁-1(欧洲)数字转换为其他Unicode十进制数字。使用此类的用户主要是希望使用国家数字形状呈现数据的人,但发现使用拉丁-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 = ...; // 将所有欧洲数字(零除外)形状为阿拉伯数字 NumericShaper shaper = NumericShaper.getShaper(NumericShaper.ARABIC); shaper.shape(text, start, count); // 如果前面的文本是阿拉伯文,则将欧洲数字形状为阿拉伯数字,或者 // 如果前面的文本是泰米尔文,则将欧洲数字形状为泰米尔数字,或者 // 如果没有前面的文本,或者 // 前面的文本既不是阿拉伯文也不是泰米尔文,则保留欧洲数字不变 NumericShaper shaper = NumericShaper.getContextualShaper(NumericShaper.ARABIC | NumericShaper.TAMIL, NumericShaper.EUROPEAN); shaper.shape(text, start, count);
基于位掩码和枚举的Unicode范围
此类支持两种不同的编程接口来表示特定脚本数字的Unicode范围:基于位掩码的接口,如NumericShaper.ARABIC
,和基于枚举的接口,如NumericShaper.Range.ARABIC
。可以通过OR位掩码常量指定多个范围,例如:
或使用NumericShaper.ARABIC | NumericShaper.TAMIL
NumericShaper.Range
常量创建Set
,例如:
基于枚举的范围是基于位掩码的范围的超集。EnumSet.of(NumericShaper.Range.ARABIC, NumericShaper.Range.TAMIL)
如果混合使用这两个接口(包括序列化),则Unicode范围值将映射到可能的对应值,例如从NumericShaper.ARABIC
到NumericShaper.Range.ARABIC
。如果指定了任何不可映射的范围值,例如NumericShaper.Range.BALINESE
,则将忽略这些范围。
十进制数字优先级
一个Unicode范围可能有多组十进制数字。如果为同一Unicode范围指定了多组十进制数字集,其中一组将按照以下方式优先:
- 自1.4版本起:
- 1.4
- 参见:
-
Nested Class Summary
Modifier and TypeClassDescriptionstatic enum
NumericShaper.Range
表示具有自己十进制数字的脚本的Unicode范围。 -
Field Summary
Modifier and TypeFieldDescriptionstatic final int
用于完整的上下文形状标识所有范围。static final int
标识阿拉伯范围和十进制基数。static final int
标识孟加拉范围和十进制基数。static final int
标识梵文范围和十进制基数。static final int
标识阿拉伯范围和扩展的阿拉伯十进制基数。static final int
标识埃塞俄比亚范围和十进制基数。static final int
标识拉丁-1(欧洲)和扩展范围,以及拉丁-1(欧洲)十进制基数。static final int
标识古吉拉特范围和十进制基数。static final int
标识果鲁穆奇范围和十进制基数。static final int
标识卡纳达范围和十进制基数。static final int
标识高棉范围和十进制基数。static final int
标识老挝范围和十进制基数。static final int
标识马拉雅拉姆范围和十进制基数。static final int
标识蒙古范围和十进制基数。static final int
标识缅甸范围和十进制基数。static final int
标识奥里亚范围和十进制基数。static final int
标识泰米尔范围和十进制基数。static final int
标识泰卢固范围和十进制基数。static final int
标识泰语范围和十进制基数。static final int
标识藏文范围和十进制基数。 -
Method Summary
Modifier and TypeMethodDescriptionboolean
如果指定的对象是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
返回将要形状的所有范围的值的OR结果。返回表示将要形状的所有Unicode范围的Set
。static NumericShaper
getShaper
(int singleRange) 为提供的Unicode范围返回形状器。static NumericShaper
getShaper
(NumericShaper.Range singleRange) 为提供的Unicode范围返回形状器。int
hashCode()
返回此形状器的哈希码。boolean
返回一个boolean
,指示此形状器是否进行上下文形状。void
shape
(char[] text, int start, int count) 转换在开始和开始+计数之间出现的文本中的数字。void
shape
(char[] text, int start, int count, int context) 转换在开始和开始+计数之间出现的文本中的数字,使用提供的上下文。void
shape
(char[] text, int start, int count, NumericShaper.Range context) 使用提供的上下文,转换在start
和start + count
之间出现的文本中的数字。toString()
返回描述此形状器的String
。
-
Field Details
-
EUROPEAN
public static final int EUROPEAN标识拉丁-1(欧洲)和扩展范围,以及拉丁-1(欧洲)十进制基数。- 参见:
-
ARABIC
public static final int ARABIC标识阿拉伯范围和十进制基数。- 参见:
-
EASTERN_ARABIC
public static final int EASTERN_ARABIC标识阿拉伯范围和扩展的阿拉伯十进制基数。- 参见:
-
DEVANAGARI
public static final int DEVANAGARI标识梵文范围和十进制基数。- 参见:
-
BENGALI
public static final int BENGALI标识孟加拉范围和十进制基数。- 参见:
-
GURMUKHI
public static final int GURMUKHI标识果鲁穆奇范围和十进制基数。- 参见:
-
GUJARATI
public static final int GUJARATI标识古吉拉特范围和十进制基数。- 参见:
-
ORIYA
public static final int ORIYA标识奥里亚范围和十进制基数。- 参见:
-
TAMIL
public static final int TAMIL标识泰米尔范围和十进制基数。- 参见:
-
TELUGU
public static final int TELUGU标识泰卢固范围和十进制基数。- 参见:
-
KANNADA
public static final int KANNADA标识卡纳达范围和十进制基数。- 参见:
-
MALAYALAM
public static final int MALAYALAM标识马拉雅拉姆范围和十进制基数。- 参见:
-
THAI
public static final int THAI标识泰语范围和十进制基数。- 参见:
-
LAO
public static final int LAO标识老挝范围和十进制基数。- 参见:
-
TIBETAN
public static final int TIBETAN标识藏文范围和十进制基数。- 参见:
-
MYANMAR
public static final int MYANMAR标识缅甸范围和十进制基数。- 参见:
-
ETHIOPIC
public static final int ETHIOPIC标识埃塞俄比亚范围和十进制基数。- 参见:
-
KHMER
public static final int KHMER标识高棉范围和十进制基数。- 参见:
-
MONGOLIAN
public static final int MONGOLIAN标识蒙古范围和十进制基数。- 参见:
-
ALL_RANGES
public static final int ALL_RANGES标识所有范围,用于完整的上下文形状。此常量指定所有基于位掩码的范围。使用
EnumSet.allOf(NumericShaper.Range.class)
指定所有基于枚举的范围。- 参见:
-
-
Method Details
-
getShaper
返回提供的Unicode范围的形状器。所有拉丁-1(欧洲)数字将转换为相应的十进制Unicode数字。- 参数:
-
singleRange
- 指定的Unicode范围 - 返回:
- 一个非上下文数字形状器
- 抛出:
-
IllegalArgumentException
- 如果范围不是单一范围
-
getShaper
返回提供的Unicode范围的形状器。所有拉丁-1(欧洲)数字将转换为指定Unicode范围的相应十进制数字。- 参数:
-
singleRange
- 由NumericShaper.Range
常量给定的Unicode范围。 - 返回:
-
一个非上下文
NumericShaper
。 - 抛出:
-
NullPointerException
- 如果singleRange
为null
- 自:
- 1.7
-
getContextualShaper
返回提供的Unicode范围的上下文形状器。如果范围是提供的范围之一,则拉丁-1(欧洲)数字将转换为前文文本范围对应的十进制数字。多个范围通过或值在一起表示,例如,NumericShaper.ARABIC | NumericShaper.THAI
。该形状器假定欧洲作为起始上下文,也就是说,如果在字符串中遇到强方向文本之前遇到欧洲数字,则假定上下文为欧洲,因此数字不会形状。- 参数:
-
ranges
- 指定的Unicode范围 - 返回:
- 指定范围的形状器
-
getContextualShaper
返回提供的Unicode范围的上下文形状器。如果范围是提供的范围之一,则拉丁-1(欧洲)数字将转换为前文文本范围对应的十进制数字。该形状器假定欧洲作为起始上下文,也就是说,如果在字符串中遇到强方向文本之前遇到欧洲数字,则假定上下文为欧洲,因此数字不会形状。
- 参数:
-
ranges
- 指定的Unicode范围 - 返回:
- 指定范围的上下文形状器
- 抛出:
-
NullPointerException
- 如果ranges
为null
- 自:
- 1.7
-
getContextualShaper
返回提供的Unicode范围的上下文形状器。如果范围是提供的范围之一,则拉丁-1(欧洲)数字将转换为前文文本范围对应的十进制数字。多个范围通过或值在一起表示,例如,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范围的上下文形状器。如果范围是提供的范围之一,则拉丁-1(欧洲)数字将转换为前文文本范围对应的十进制数字。该形状器使用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
- 如果start或start + count超出范围 -
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
- 如果start或start + count超出范围 -
NullPointerException
- 如果text为null -
IllegalArgumentException
- 如果这是上下文形状器且指定的context
不是单一有效范围。
-
shape
转换在start
和start + count
之间出现的文本中的数字,使用提供的context
。如果形状器不是上下文形状器,则忽略context
。- 参数:
-
text
- 一个char
数组 -
start
- 开始转换的text
中的索引 -
count
- 要转换的text
中的char
数 -
context
- 要将字符转换为的上下文,例如NumericShaper.Range.EUROPEAN
- 抛出:
-
IndexOutOfBoundsException
- 如果start
或start + count
超出范围 -
NullPointerException
- 如果text
或context
为null - 自:
- 1.7
-
isContextual
public boolean isContextual()返回一个boolean
,指示此形状器是否进行上下文形状。- 返回:
-
如果此形状器是上下文形状器,则为
true
;否则为false
。
-
getRanges
public int getRanges()返回一个int
,将所有将被塑形的范围的值进行按位或操作。例如,要检查一个塑形器是否塑形为阿拉伯语,您可以使用以下代码:
if ((shaper.getRanges() & shaper.ARABIC) != 0) { ...
请注意,此方法仅支持基于位掩码的范围。对于基于枚举的范围,请调用
getRangeSet()
。- 返回:
- 所有将被塑形的范围的值。
-
getRangeSet
返回一个表示将被塑形的所有Unicode范围的Set
。- 返回:
- 所有将被塑形的Unicode范围。
- 自:
- 1.7
-
hashCode
public int hashCode()返回此塑形器的哈希码。 -
equals
如果指定的对象是NumericShaper
的实例,并且与此对象形状相同,无论范围表示、位掩码还是枚举如何,返回true
。例如,以下代码将产生"true"
。NumericShaper ns1 = NumericShaper.getShaper(NumericShaper.ARABIC); NumericShaper ns2 = NumericShaper.getShaper(NumericShaper.Range.ARABIC); System.out.println(ns1.equals(ns2));
-
toString
返回描述此塑形器的String
。此方法仅用于调试目的。
-