java.lang.Object
java.awt.font.NumericShaper
- 所有已实现的接口:
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 范围指定了多个小数位集,则其中一个集将优先,如下所示。
- 自从:
- 1.4
- 参见:
-
内部类总结
内部类 -
字段摘要
字段修饰符和类型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
,无论范围表示、位掩码或枚举如何。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
返回一个int
,它将所有将被整形的范围的值组合在一起。返回一个Set
表示此NumericShaper
中将被整形的所有 Unicode 范围。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) 转换文本中出现在 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
之间的数字。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
返回提供的 unicode 范围的整形器。所有 Latin-1 (EUROPEAN) 数字都转换为相应的十进制 unicode 数字。- 参数:
singleRange
- 指定的 Unicode 范围- 返回:
- 一个非上下文的数字整形器
- 抛出:
IllegalArgumentException
- 如果范围不是单个范围
-
getShaper
返回所提供的 Unicode 范围的整形器。所有 Latin-1 (EUROPEAN) 数字都转换为指定 Unicode 范围的相应十进制数字。- 参数:
singleRange
- 由NumericShaper.Range
常数给出的 Unicode 范围。- 返回:
-
非上下文
NumericShaper
。 - 抛出:
NullPointerException
- 如果singleRange
是null
- 自从:
- 1.7
-
getContextualShaper
返回所提供的 unicode 范围的上下文整形器。 Latin-1 (EUROPEAN) 数字将转换为对应于前面文本范围的十进制数字,如果该范围是提供的范围之一。多个范围通过对值进行或运算来表示,例如NumericShaper.ARABIC | NumericShaper.THAI
。整形器假定 EUROPEAN 作为起始上下文,也就是说,如果在字符串中任何强方向文本之前遇到 EUROPEAN 数字,则上下文被假定为 EUROPEAN,因此数字不会整形。- 参数:
ranges
- 指定的 Unicode 范围- 返回:
- 指定范围的整形器
-
getContextualShaper
返回所提供的 Unicode 范围的上下文整形器。如果范围是提供的范围之一,则 Latin-1 (EUROPEAN) 数字将转换为对应于前面文本范围的十进制数字。整形器假定 EUROPEAN 作为起始上下文,也就是说,如果在字符串中任何强方向文本之前遇到 EUROPEAN 数字,则上下文被假定为 EUROPEAN,因此数字不会整形。
- 参数:
ranges
- 指定的 Unicode 范围- 返回:
- 指定范围的上下文整形器
- 抛出:
NullPointerException
- 如果ranges
是null
。- 自从:
- 1.7
-
getContextualShaper
返回所提供的 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
- 如果 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
使用提供的context
转换文本中出现在start
和start + count
之间的数字。如果整形器不是上下文整形器,Context
将被忽略。- 参数:
text
- 一个char
数组start
- 开始转换的text
索引count
- 要转换的text
中的char
的数量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
,它将所有将被整形的范围的值组合在一起。例如,要检查整形器是否整形为阿拉伯语,您可以使用以下命令:
if ((shaper.getRanges() & shaper.ARABIC) != 0) { ...
请注意,此方法仅支持基于位掩码的范围。为基于枚举的范围调用
getRangeSet()
。- 返回:
- 要整形的所有范围的值。
-
getRangeSet
返回一个Set
表示此NumericShaper
中将被整形的所有 Unicode 范围。- 返回:
- 所有要整形的 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
。此方法仅用于调试目的。
-