Most visited

Recently visited

Added in API level 24

Normalizer2

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()(仅处理计算排序键字节的子字符串)使用迭代规范化。

这些函数返回的规范化边界集可能并不完整:可能有更多的边界可以返回。 不同的函数可能返回不同的边界

Summary

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

Public methods

append

Added in API level 24
StringBuilder append (StringBuilder first, 
                CharSequence second)

将第二个字符串附加到第一个字符串(在边界合并它们)并返回第一个字符串。 如果两个字符串都被标准化,结果将被标准化。 第一个和第二个字符串必须是不同的对象。

Parameters
first StringBuilder: string, should be normalized
second CharSequence: string, should be normalized
Returns
StringBuilder first

composePair

Added in API level 24
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.

getCombiningClass

Added in API level 24
int getCombiningClass (int c)

获取c的组合类。 默认实现返回0,但所有标准实现都返回Unicode Canonical_Combining_Class值。

Parameters
c int: code point
Returns
int c's combining class

getDecomposition

Added in API level 24
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

getInstance

Added in API level 24
Normalizer2 getInstance (InputStream data, 
                String name, 
                Normalizer2.Mode mode)

返回使用指定数据文件(ICU数据文件,如果data = null或其他自定义二进制数据)并根据指定模式组合或分解文本的Normalizer2实例。 返回一个不可修改的单例实例。

  • Use data=null for data files that are part of ICU's own data.
  • Use name="nfc" and COMPOSE/DECOMPOSE for Unicode standard NFC/NFD.
  • Use name="nfkc" and COMPOSE/DECOMPOSE for Unicode standard NFKC/NFKD.
  • Use name="nfkc_cf" and COMPOSE for Unicode standard NFKC_CF=NFKC_Casefold.
If data!=null, then the binary data is read once and cached using the provided name as the key. If you know or expect the data to be cached already, you can use data!=null for non-ICU data as well.

任何 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

getNFCInstance

Added in API level 24
Normalizer2 getNFCInstance ()

为Unicode NFC标准化返回一个Normalizer2实例。 与getInstance(null,“nfc”,Mode.COMPOSE)相同。 返回一个不可修改的单例实例。

Returns
Normalizer2 the requested Normalizer2, if successful

getNFDInstance

Added in API level 24
Normalizer2 getNFDInstance ()

为Unicode NFD规范化返回一个Normalizer2实例。 与getInstance(null,“nfc”,Mode.DECOMPOSE)相同。 返回一个不可修改的单例实例。

Returns
Normalizer2 the requested Normalizer2, if successful

getNFKCCasefoldInstance

Added in API level 24
Normalizer2 getNFKCCasefoldInstance ()

返回Unicode NFKC_Casefold规范化的Normalizer2实例。 与getInstance(null,“nfkc_cf”,Mode.COMPOSE)相同。 返回一个不可修改的单例实例。

Returns
Normalizer2 the requested Normalizer2, if successful

getNFKCInstance

Added in API level 24
Normalizer2 getNFKCInstance ()

返回Unicode NFKC规范化的Normalizer2实例。 与getInstance(null,“nfkc”,Mode.COMPOSE)相同。 返回一个不可修改的单例实例。

Returns
Normalizer2 the requested Normalizer2, if successful

getNFKDInstance

Added in API level 24
Normalizer2 getNFKDInstance ()

返回Unicode NFKD规范化的Normalizer2实例。 与getInstance(null,“nfkc”,Mode.DECOMPOSE)相同。 返回一个不可修改的单例实例。

Returns
Normalizer2 the requested Normalizer2, if successful

getRawDecomposition

Added in API level 24
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

hasBoundaryAfter

Added in API level 24
boolean hasBoundaryAfter (int c)

无论上下文如何,测试角色是否始终具有规范化边界。 如果为true,那么该字符不会进行规范化 - 与以下字符交互。 换句话说,包含这个字符的字符串可以通过处理直到这个字符的部分和在这个字符之后独立地进行标准化。 这用于迭代规范化。 详情请参阅班级文件。

请注意,此操作可能比hasBoundaryBefore()慢得多。

Parameters
c int: character to test
Returns
boolean true if c has a normalization boundary after it

hasBoundaryBefore

Added in API level 24
boolean hasBoundaryBefore (int c)

测试角色是否始终具有标准化边界,而不管上下文。 如果为true,那么该字符不会标准化 - 与前面的字符进行交互。 换句话说,包含这个字符的字符串可以通过处理这个字符之前的部分并且独立地从这个字符开始来标准化。 这用于迭代规范化。 详情请参阅班级文件。

Parameters
c int: character to test
Returns
boolean true if c has a normalization boundary before it

isInert

Added in API level 24
boolean isInert (int c)

测试角色是否是标准化惰性的。 如果为true,那么角色不会更改,也不会标准化 - 与之前或之后的角色进行交互。 换句话说,包含这个字符的字符串可以通过在这个字符之前和在这个字符之后独立地处理部分来规范化。 这用于迭代规范化。 详情请参阅班级文件。

请注意,此操作可能比hasBoundaryBefore()慢得多。

Parameters
c int: character to test
Returns
boolean true if c is normalization-inert

isNormalized

Added in API level 24
boolean isNormalized (CharSequence s)

测试字符串是否标准化。 在内部,如果quickCheck()方法返回“maybe”(这只适用于两个COMPOSE模式),则此方法解析为“yes”或“no”以提供确定的结果,但需要花费更多工作量在这些情况下。

Parameters
s CharSequence: input string
Returns
boolean true if s is normalized

normalize

Added in API level 24
String normalize (CharSequence src)

返回源字符串的标准化形式。

Parameters
src CharSequence: source string
Returns
String normalized src

normalize

Added in API level 24
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

normalize

Added in API level 24
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

normalizeSecondAndAppend

Added in API level 24
StringBuilder normalizeSecondAndAppend (StringBuilder first, 
                CharSequence second)

将第二个字符串的标准化形式附加到第一个字符串(在边界合并它们)并返回第一个字符串。 如果第一个字符串被标准化,结果将被标准化。 第一个和第二个字符串必须是不同的对象。

Parameters
first StringBuilder: string, should be normalized
second CharSequence: string, will be normalized
Returns
StringBuilder first

quickCheck

Added in API level 24
Normalizer.QuickCheckResult quickCheck (CharSequence s)

测试字符串是否标准化。 对于两个COMPOSE模式,结果可能是“可能”,如果需要更多的工作来确定地解决。 使用spanQuickCheckYes()和normalizeSecondAndAppend()来快速检查+规范化,以避免重新检查“是”前缀。

Parameters
s CharSequence: input string
Returns
Normalizer.QuickCheckResult the quick check result

spanQuickCheckYes

Added in API level 24
int spanQuickCheckYes (CharSequence s)

返回输入字符串的标准化子字符串的结尾。 换句话说,使用end=spanQuickCheckYes(s); ,子字符串s.subSequence(0, end)将通过“是”结果的快速检查。

返回的结束索引通常是“否”或“可能”字符之前的一个或多个字符:结束索引处于归一化边界。 (更多关于规范化边界的信息,请参阅类文档。)

当目标是标准化字符串并且大多数输入字符串已经被规范化时,然后调用此方法,并且如果它返回比输入字符串短的前缀,请复制该前缀并对余数使用normalizeSecondAndAppend()。

Parameters
s CharSequence: input string
Returns
int "yes" span end index

Hooray!