public final class NumericShaper extends Object implements Serializable
NumericShaper
类用于将Latin-1(欧洲)数字转换为其他Unicode十进制数字。
这个类的用户主要是希望使用国家数字形状呈现数据的人,但是使用Latin-1(欧洲)数字,可以更方便地在内部表示数据。
这不会解释不推荐使用的数字形状选择器字符(U + 206E)。
NumericShaper的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
Set
与NumericShaper.Range
常量,如:
基于枚举的范围是基于位掩码的超级集。EnumSet.of(NumericShaper.Scirpt.ARABIC, NumericShaper.Range.TAMIL)
如果两个接口被混合(包括序列),Unicode的范围值被映射到它们的对应,其中这样的映射是可能的,如NumericShaper.Range.ARABIC
从/到NumericShaper.ARABIC
。 如果指定了任何不可映射的范围值,例如NumericShaper.Range.BALINESE
,那么这些范围将被忽略。
十进制数优先
Unicode范围可能有多个十进制数字。 如果为同一个Unicode范围指定了多个十进制数字集,则其中一个集合的优先级如下。
Unicode RangeNumericShaper
Constants Precedence Arabic NumericShaper.ARABIC
NumericShaper.EASTERN_ARABIC
NumericShaper.EASTERN_ARABIC
NumericShaper.Range.ARABIC
NumericShaper.Range.EASTERN_ARABIC
NumericShaper.Range.EASTERN_ARABIC
Tai Tham NumericShaper.Range.TAI_THAM_HORA
NumericShaper.Range.TAI_THAM_THAM
NumericShaper.Range.TAI_THAM_THAM
Modifier and Type | Class and Description |
---|---|
static class |
NumericShaper.Range
NumericShaper.Range 表示具有其自己的十进制数字的脚本的Unicode范围。
|
Modifier and Type | Field and Description |
---|---|
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 | Method and Description |
---|---|
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 描述此成形。
|
public static final int EUROPEAN
public static final int ARABIC
public static final int EASTERN_ARABIC
public static final int DEVANAGARI
public static final int BENGALI
public static final int GURMUKHI
public static final int GUJARATI
public static final int ORIYA
public static final int TAMIL
public static final int TELUGU
public static final int KANNADA
public static final int MALAYALAM
public static final int THAI
public static final int LAO
public static final int TIBETAN
public static final int MYANMAR
public static final int ETHIOPIC
public static final int KHMER
public static final int MONGOLIAN
public static final int ALL_RANGES
该常数指定所有基于位掩码的范围。 使用EmunSet.allOf(NumericShaper.Range.class)
指定所有基于枚举的范围。
public static NumericShaper getShaper(int singleRange)
singleRange
- 指定的Unicode范围
IllegalArgumentException
- 如果范围不是单个范围
public static NumericShaper getShaper(NumericShaper.Range singleRange)
singleRange
- 由NumericShaper.Range
常数给出的Unicode范围。
NumericShaper
。
NullPointerException
- 如果
singleRange
是
null
public static NumericShaper getContextualShaper(int ranges)
NumericShaper.ARABIC | NumericShaper.THAI
。
整形器以欧洲方式为起始语境,也就是说,如果字符串中任何强有力的方向文本之前遇到欧洲数字,则上下文被推定为欧洲,因此数字将不会变形。
ranges
- 指定的Unicode范围
public static NumericShaper getContextualShaper(Set<NumericShaper.Range> ranges)
整形器以欧洲方式为起始语境,也就是说,如果字符串中任何强有力的方向文本之前遇到欧洲数字,则上下文被推定为欧洲,因此数字将不会变形。
ranges
- 指定的Unicode范围
NullPointerException
- 如果
ranges
是
null
。
public static NumericShaper getContextualShaper(int ranges, int defaultContext)
NumericShaper.ARABIC | NumericShaper.THAI
。
整形器使用defaultContext作为起始上下文。
ranges
- 指定的Unicode范围
defaultContext
- 起始上下文,如
NumericShaper.EUROPEAN
IllegalArgumentException
- 如果指定的
defaultContext
不是单个有效范围。
public static NumericShaper getContextualShaper(Set<NumericShaper.Range> ranges, NumericShaper.Range defaultContext)
defaultContext
作为起始上下文。
ranges
- 指定的Unicode范围
defaultContext
- 起始上下文,如
NumericShaper.Range.EUROPEAN
NullPointerException
- 如果
ranges
或
defaultContext
是
null
public void shape(char[] text, int start, int count)
text
- 要转换的字符数组
start
- 索引成
text
开始转换
count
- 要转换的text中的
text
数
IndexOutOfBoundsException
- 如果启动或启动+计数超出范围
NullPointerException
- 如果文本为空
public void shape(char[] text, int start, int count, int context)
text
- 一个字符数组
start
- 索引成
text
开始转换
count
- 要转换的text中的
text
数
context
- 转换
context
的上下文,如
NumericShaper.EUROPEAN
IndexOutOfBoundsException
- 如果启动或启动+计数超出范围
NullPointerException
- 如果文本为空
IllegalArgumentException
- 如果这是一个上下文整形器,并且指定的
context
不是单个有效范围。
public void shape(char[] text, int start, int count, NumericShaper.Range context)
context
转换在start
和start + count
之间的文本中的数字。
Context
被忽略,如果整形器不是上下文整形器。
text
- 一个
char
阵列
start
- 索引成
text
开始转换
count
-数量
char
S IN
text
转换
context
- 转换为字符的上下文,如
NumericShaper.Range.EUROPEAN
IndexOutOfBoundsException
- 如果
start
或
start + count
超出范围
NullPointerException
- 如果
text
或
context
为空
public boolean isContextual()
boolean
指示此成形器是否形成上下文。
true
如果这个整形器是上下文的;
false
否则。
public int getRanges()
int
,将所有范围的值合并在一起。
例如,要检查整形器是否形状为阿拉伯语,您将使用以下内容:
if ((shaper.getRanges() & shaper.ARABIC) != 0) { ...
请注意,此方法仅支持基于位掩码的范围。 调用getRangeSet()
为基于枚举的范围。
public Set<NumericShaper.Range> getRangeSet()
Set
代表所有的Unicode范围在此
NumericShaper
将要成型。
public int hashCode()
hashCode
在
Object
Object.hashCode()
public boolean equals(Object o)
true
如果指定的对象是一个实例NumericShaper
和一致地成形这一个,无论范围的表示,所述位掩码或枚举的。
例如,以下代码生成"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)