- java.lang.Object
-
- java.awt.font.NumericShaper
-
- All Implemented Interfaces:
-
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
Set
与NumericShaper.Range
常量,如:EnumSet.of(NumericShaper.Range.ARABIC, NumericShaper.Range.TAMIL)
如果两个接口混合(包括序列化),则Unicode范围值映射到可以进行映射的对应方,如
NumericShaper.Range.ARABIC
从/到NumericShaper.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
-
-
Nested Class Summary
Nested Classes Modifier and Type Class 描述 static class
NumericShaper.Range
ANumericShaper.Range
表示具有其自己的十进制数字的脚本的Unicode范围。
-
Field Summary
Fields Modifier and Type Field 描述 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
确定拉丁语1(欧洲)和扩展范围以及拉丁语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范围和十进制基数。
-
方法摘要
所有方法 静态方法 接口方法 具体的方法 Modifier and Type 方法 描述 boolean
equals(Object o)
返回true
如果指定的对象是NumericShaper
的实例,并且其形状与此一样,与范围表示,位掩码或枚举无关。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
,将所有范围的值组合在一起。Set<NumericShaper.Range>
getRangeSet()
返回Set
代表所有的Unicode范围在此NumericShaper
将要成型。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
确定拉丁语1(欧洲)和扩展范围以及拉丁语1(欧洲)十进制基数。- 另请参见:
- Constant Field Values
-
ARABIC
public static final int ARABIC
标识ARABIC范围和十进制基数。- 另请参见:
- Constant Field Values
-
EASTERN_ARABIC
public static final int EASTERN_ARABIC
标识ARABIC范围和ARABIC_EXTENDED十进制基数。- 另请参见:
- Constant Field Values
-
DEVANAGARI
public static final int DEVANAGARI
标识DEVANAGARI范围和十进制基数。- 另请参见:
- Constant Field Values
-
BENGALI
public static final int BENGALI
标识BENGALI范围和十进制基数。- 另请参见:
- Constant Field Values
-
GURMUKHI
public static final int GURMUKHI
标识GURMUKHI范围和十进制基数。- 另请参见:
- Constant Field Values
-
GUJARATI
public static final int GUJARATI
标识GUJARATI范围和十进制基数。- 另请参见:
- Constant Field Values
-
ORIYA
public static final int ORIYA
标识ORIYA范围和十进制基数。- 另请参见:
- Constant Field Values
-
TAMIL
public static final int TAMIL
标识TAMIL范围和十进制基数。- 另请参见:
- Constant Field Values
-
TELUGU
public static final int TELUGU
标识TELUGU范围和十进制基数。- 另请参见:
- Constant Field Values
-
KANNADA
public static final int KANNADA
标识KANNADA范围和十进制基数。- 另请参见:
- Constant Field Values
-
MALAYALAM
public static final int MALAYALAM
标识MALAYALAM范围和十进制基数。- 另请参见:
- Constant Field Values
-
THAI
public static final int THAI
标识THAI范围和十进制基数。- 另请参见:
- Constant Field Values
-
LAO
public static final int LAO
标识LAO范围和十进制基数。- 另请参见:
- Constant Field Values
-
TIBETAN
public static final int TIBETAN
标识TIBETAN范围和十进制基数。- 另请参见:
- Constant Field Values
-
MYANMAR
public static final int MYANMAR
标识MYANMAR范围和十进制基数。- 另请参见:
- Constant Field Values
-
ETHIOPIC
public static final int ETHIOPIC
标识ETHIOPIC范围和十进制基数。- 另请参见:
- Constant Field Values
-
KHMER
public static final int KHMER
标识KHMER范围和十进制基数。- 另请参见:
- Constant Field Values
-
MONGOLIAN
public static final int MONGOLIAN
标识MONGOLIAN范围和十进制基数。- 另请参见:
- Constant Field Values
-
ALL_RANGES
public static final int ALL_RANGES
识别所有范围,用于完整的上下文整形。该常数指定所有基于位掩码的范围。 使用
EnumSet.allOf(NumericShaper.Range.class)
指定所有基于枚举的范围。- 另请参见:
- Constant Field Values
-
-
方法详细信息
-
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
。 整形器以欧洲方式为起始语境,也就是说,如果字符串中任何强有力的方向文本之前遇到欧洲数字,则上下文被推定为欧洲,因此数字将不会变形。- 参数
-
ranges
- 指定的Unicode范围 - 结果
- 指定范围的整形器
-
getContextualShaper
public static NumericShaper getContextualShaper(Set<NumericShaper.Range> ranges)
返回提供的Unicode范围的上下文整形器。 如果范围是提供的范围之一,则将Latin-1(EUROPEAN)数字转换为与前一文本范围相对应的十进制数字。整形器以欧洲方式为起始语境,也就是说,如果字符串中任何强有力的方向文本之前遇到欧洲数字,则上下文被推定为欧洲,因此数字将不会变形。
- 参数
-
ranges
- 指定的Unicode范围 - 结果
- 指定范围的上下文整形器
- 异常
-
NullPointerException
- 如果ranges
是null
。 - 从以下版本开始:
- 1.7
-
getContextualShaper
public static NumericShaper getContextualShaper(int ranges, int defaultContext)
返回提供的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范围的上下文整形器。 如果范围是提供的范围之一,则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
- 如果文本为空
-
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
- 如果文本为空 -
IllegalArgumentException
- 如果这是一个上下文整形器,并且指定的context
不是单个有效范围。
-
shape
public void shape(char[] text, int start, int count, NumericShaper.Range context)
使用提供的context
转换出现在start
和start + count
之间的文本中的数字。 如果整形器不是上下文整形器,则忽略Context
。- 参数
-
text
- achar
数组 -
start
- 索引到text
开始转换 -
count
-数量char
S INtext
转换 -
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
public Set<NumericShaper.Range> getRangeSet()
返回Set
代表所有的Unicode范围在此NumericShaper
将要成型。- 结果
- 所有的Unicode范围都要形成。
- 从以下版本开始:
- 1.7
-
hashCode
public int hashCode()
返回此整形器的哈希码。- 重写:
-
hashCode
在Object
- 结果
- 这个整形器的哈希码。
- 另请参见:
-
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)
-
-