public abstract class Normalizer2
extends Object
java.lang.Object | |
↳ | android.icu.text.Normalizer2 |
用于标准Unicode规范化或使用自定义映射表的Unicode规范化功能。 这个类的所有实例都是不可修改/不可变的。 Normalizer2类不适用于公共子类。
主要功能是生成规范化字符串并检测字符串是否已经规范化。 最常用的规范化形式是http://www.unicode.org/unicode/reports/tr15/中定义的形式。但是,此API支持用于专业目的的其他规范化形式。 例如,NFKC_Casefold通过getInstance(“nfkc_cf”,COMPOSE)提供,可用于UTS#46的实现。
不仅提供了标准组合模式和分解模式,还提供了Mode enum中记录的其他模式。
该类中的一些功能标识了规范化边界。 在规范化边界上,在它之前和从它开始的字符串部分不会相互作用,并且可以独立处理。
spanQuickCheckYes()停在标准化边界。 如果目标是标准化字符串,则可以复制边界之前的文本,其余部分可以使用normalizeSecondAndAppend()进行处理。
hasBoundaryBefore(),hasBoundaryAfter()和isInert()函数测试一个字符是否保证处于规范化边界,而不考虑上下文。 这用于从一个归一化边界移动到下一个或前一个边界,并用于执行迭代归一化。
当只需要处理较长字符串的一小部分时,迭代规范化非常有用。 例如,在ICU中,NormalizationTransliterator(避免替换已经正常化的文本)和ucol_nextSortKeyPart()(仅处理计算排序键字节的子字符串)使用迭代规范化。
这些函数返回的规范化边界集可能并不完整:可能有更多的边界可以返回。 不同的函数可能返回不同的边界
Nested classes |
|
---|---|
枚举 |
Normalizer2.Mode 标准化模式的常量。 |
Public methods |
|
---|---|
abstract StringBuilder |
append(StringBuilder first, CharSequence second) 将第二个字符串附加到第一个字符串(在边界合并它们)并返回第一个字符串。 |
int |
composePair(int a, int b) 执行a&b的成对组合并返回组合(如果有)。 |
int |
getCombiningClass(int c) 获取c的组合类。 |
abstract String |
getDecomposition(int c) 获取c的分解映射。 |
static Normalizer2 |
getInstance(InputStream data, String name, Normalizer2.Mode mode) 返回使用指定数据文件(ICU数据文件,如果data = null或其他自定义二进制数据)并根据指定模式组合或分解文本的Normalizer2实例。 |
static Normalizer2 |
getNFCInstance() 为Unicode NFC标准化返回一个Normalizer2实例。 |
static Normalizer2 |
getNFDInstance() 为Unicode NFD规范化返回一个Normalizer2实例。 |
static Normalizer2 |
getNFKCCasefoldInstance() 返回Unicode NFKC_Casefold规范化的Normalizer2实例。 |
static Normalizer2 |
getNFKCInstance() 返回Unicode NFKC规范化的Normalizer2实例。 |
static Normalizer2 |
getNFKDInstance() 返回Unicode NFKD规范化的Normalizer2实例。 |
String |
getRawDecomposition(int c) 获取c的原始分解映射。 |
abstract boolean |
hasBoundaryAfter(int c) 无论上下文如何,测试角色是否始终具有规范化边界。 |
abstract boolean |
hasBoundaryBefore(int c) 测试角色是否始终具有标准化边界,而不管上下文。 |
abstract boolean |
isInert(int c) 测试角色是否是标准化惰性的。 |
abstract boolean |
isNormalized(CharSequence s) 测试字符串是否标准化。 |
String |
normalize(CharSequence src) 返回源字符串的标准化形式。 |
abstract StringBuilder |
normalize(CharSequence src, StringBuilder dest) 将源字符串的规范化形式写入目标字符串(替换其内容)并返回目标字符串。 |
abstract Appendable |
normalize(CharSequence src, Appendable dest) 将源字符串的规范化形式写入目标Appendable并返回目标Appendable。 |
abstract StringBuilder |
normalizeSecondAndAppend(StringBuilder first, CharSequence second) 将第二个字符串的标准化形式附加到第一个字符串(在边界合并它们)并返回第一个字符串。 |
abstract Normalizer.QuickCheckResult |
quickCheck(CharSequence s) 测试字符串是否标准化。 |
abstract int |
spanQuickCheckYes(CharSequence s) 返回输入字符串的标准化子字符串的结尾。 |
Inherited methods |
|
---|---|
From class java.lang.Object
|
StringBuilder append (StringBuilder first, CharSequence second)
将第二个字符串附加到第一个字符串(在边界合并它们)并返回第一个字符串。 如果两个字符串都被标准化,结果将被标准化。 第一个和第二个字符串必须是不同的对象。
Parameters | |
---|---|
first |
StringBuilder : string, should be normalized |
second |
CharSequence : string, should be normalized |
Returns | |
---|---|
StringBuilder |
first |
int composePair (int a, int b)
执行a&b的成对组合并返回组合(如果有)。
仅当c具有双向映射到a + b时才返回复合代码点c。 在标准Unicode规范化中,这意味着c具有对a + b的规范分解,而c没有Full_Composition_Exclusion属性。
该功能独立于Normalizer2的模式。 默认实现返回一个负值。
Parameters | |
---|---|
a |
int : A (normalization starter) code point. |
b |
int : Another code point. |
Returns | |
---|---|
int |
The non-negative composite code point if there is one; otherwise a negative value. |
int getCombiningClass (int c)
获取c的组合类。 默认实现返回0,但所有标准实现都返回Unicode Canonical_Combining_Class值。
Parameters | |
---|---|
c |
int : code point |
Returns | |
---|---|
int |
c's combining class |
String getDecomposition (int c)
获取c的分解映射。 大致相当于在DECOMPOSE Normalizer2实例上规范c的String形式,但要快得多,除非此函数在此实例的数据中没有分解映射的情况下返回null。 该功能独立于Normalizer2的模式。
Parameters | |
---|---|
c |
int : code point |
Returns | |
---|---|
String |
c's decomposition mapping, if any; otherwise null |
Normalizer2 getInstance (InputStream data, String name, Normalizer2.Mode mode)
返回使用指定数据文件(ICU数据文件,如果data = null或其他自定义二进制数据)并根据指定模式组合或分解文本的Normalizer2实例。 返回一个不可修改的单例实例。
任何 IOException
被包裹成 ICUUncheckedIOException
。
Parameters | |
---|---|
data |
InputStream : the binary, big-endian normalization (.nrm file) data, or null for ICU data |
name |
String : "nfc" or "nfkc" or "nfkc_cf" or name of custom data file |
mode |
Normalizer2.Mode : normalization mode (compose or decompose etc.) |
Returns | |
---|---|
Normalizer2 |
the requested Normalizer2, if successful |
Normalizer2 getNFCInstance ()
为Unicode NFC标准化返回一个Normalizer2实例。 与getInstance(null,“nfc”,Mode.COMPOSE)相同。 返回一个不可修改的单例实例。
Returns | |
---|---|
Normalizer2 |
the requested Normalizer2, if successful |
Normalizer2 getNFDInstance ()
为Unicode NFD规范化返回一个Normalizer2实例。 与getInstance(null,“nfc”,Mode.DECOMPOSE)相同。 返回一个不可修改的单例实例。
Returns | |
---|---|
Normalizer2 |
the requested Normalizer2, if successful |
Normalizer2 getNFKCCasefoldInstance ()
返回Unicode NFKC_Casefold规范化的Normalizer2实例。 与getInstance(null,“nfkc_cf”,Mode.COMPOSE)相同。 返回一个不可修改的单例实例。
Returns | |
---|---|
Normalizer2 |
the requested Normalizer2, if successful |
Normalizer2 getNFKCInstance ()
返回Unicode NFKC规范化的Normalizer2实例。 与getInstance(null,“nfkc”,Mode.COMPOSE)相同。 返回一个不可修改的单例实例。
Returns | |
---|---|
Normalizer2 |
the requested Normalizer2, if successful |
Normalizer2 getNFKDInstance ()
返回Unicode NFKD规范化的Normalizer2实例。 与getInstance(null,“nfkc”,Mode.DECOMPOSE)相同。 返回一个不可修改的单例实例。
Returns | |
---|---|
Normalizer2 |
the requested Normalizer2, if successful |
String getRawDecomposition (int c)
获取c的原始分解映射。
这与getDecomposition()方法类似,但返回由UnicodeData.txt或(对于自定义数据)在由gennorm2工具处理的映射文件中指定的原始分解映射。 相反,getDecomposition()返回此映射的经过处理的递归分解版本。
当在标准的NFKC Normalizer2实例上使用时,getRawDecomposition()返回Unicode分解_映射(dm)属性。
在标准NFC Normalizer2实例上使用时,只有在Decomposition_Type(dt)为规范(Can)时才会返回分解_映射; 在这种情况下,结果包含一个或两个代码点(= 1..4个Java字符)。
该功能独立于Normalizer2的模式。 默认实现返回null。
Parameters | |
---|---|
c |
int : code point |
Returns | |
---|---|
String |
c's raw decomposition mapping, if any; otherwise null |
boolean hasBoundaryAfter (int c)
无论上下文如何,测试角色是否始终具有规范化边界。 如果为true,那么该字符不会进行规范化 - 与以下字符交互。 换句话说,包含这个字符的字符串可以通过处理直到这个字符的部分和在这个字符之后独立地进行标准化。 这用于迭代规范化。 详情请参阅班级文件。
请注意,此操作可能比hasBoundaryBefore()慢得多。
Parameters | |
---|---|
c |
int : character to test |
Returns | |
---|---|
boolean |
true if c has a normalization boundary after it |
boolean hasBoundaryBefore (int c)
测试角色是否始终具有标准化边界,而不管上下文。 如果为true,那么该字符不会标准化 - 与前面的字符进行交互。 换句话说,包含这个字符的字符串可以通过处理这个字符之前的部分并且独立地从这个字符开始来标准化。 这用于迭代规范化。 详情请参阅班级文件。
Parameters | |
---|---|
c |
int : character to test |
Returns | |
---|---|
boolean |
true if c has a normalization boundary before it |
boolean isInert (int c)
测试角色是否是标准化惰性的。 如果为true,那么角色不会更改,也不会标准化 - 与之前或之后的角色进行交互。 换句话说,包含这个字符的字符串可以通过在这个字符之前和在这个字符之后独立地处理部分来规范化。 这用于迭代规范化。 详情请参阅班级文件。
请注意,此操作可能比hasBoundaryBefore()慢得多。
Parameters | |
---|---|
c |
int : character to test |
Returns | |
---|---|
boolean |
true if c is normalization-inert |
boolean isNormalized (CharSequence s)
测试字符串是否标准化。 在内部,如果quickCheck()方法返回“maybe”(这只适用于两个COMPOSE模式),则此方法解析为“yes”或“no”以提供确定的结果,但需要花费更多工作量在这些情况下。
Parameters | |
---|---|
s |
CharSequence : input string |
Returns | |
---|---|
boolean |
true if s is normalized |
String normalize (CharSequence src)
返回源字符串的标准化形式。
Parameters | |
---|---|
src |
CharSequence : source string |
Returns | |
---|---|
String |
normalized src |
StringBuilder normalize (CharSequence src, StringBuilder dest)
将源字符串的规范化形式写入目标字符串(替换其内容)并返回目标字符串。 源字符串和目标字符串必须是不同的对象。
Parameters | |
---|---|
src |
CharSequence : source string |
dest |
StringBuilder : destination string; its contents is replaced with normalized src |
Returns | |
---|---|
StringBuilder |
dest |
Appendable normalize (CharSequence src, Appendable dest)
将源字符串的规范化形式写入目标Appendable并返回目标Appendable。 源字符串和目标字符串必须是不同的对象。
任何 IOException
被包裹成 ICUUncheckedIOException
。
Parameters | |
---|---|
src |
CharSequence : source string |
dest |
Appendable : destination Appendable; gets normalized src appended |
Returns | |
---|---|
Appendable |
dest |
StringBuilder normalizeSecondAndAppend (StringBuilder first, CharSequence second)
将第二个字符串的标准化形式附加到第一个字符串(在边界合并它们)并返回第一个字符串。 如果第一个字符串被标准化,结果将被标准化。 第一个和第二个字符串必须是不同的对象。
Parameters | |
---|---|
first |
StringBuilder : string, should be normalized |
second |
CharSequence : string, will be normalized |
Returns | |
---|---|
StringBuilder |
first |
Normalizer.QuickCheckResult quickCheck (CharSequence s)
测试字符串是否标准化。 对于两个COMPOSE模式,结果可能是“可能”,如果需要更多的工作来确定地解决。 使用spanQuickCheckYes()和normalizeSecondAndAppend()来快速检查+规范化,以避免重新检查“是”前缀。
Parameters | |
---|---|
s |
CharSequence : input string |
Returns | |
---|---|
Normalizer.QuickCheckResult |
the quick check result |
int spanQuickCheckYes (CharSequence s)
返回输入字符串的标准化子字符串的结尾。 换句话说,使用end=spanQuickCheckYes(s);
,子字符串s.subSequence(0, end)
将通过“是”结果的快速检查。
返回的结束索引通常是“否”或“可能”字符之前的一个或多个字符:结束索引处于归一化边界。 (更多关于规范化边界的信息,请参阅类文档。)
当目标是标准化字符串并且大多数输入字符串已经被规范化时,然后调用此方法,并且如果它返回比输入字符串短的前缀,请复制该前缀并对余数使用normalizeSecondAndAppend()。
Parameters | |
---|---|
s |
CharSequence : input string |
Returns | |
---|---|
int |
"yes" span end index |