Most visited

Recently visited

Added in API level 24

Normalizer

public final class Normalizer
extends Object implements Cloneable

java.lang.Object
   ↳ android.icu.text.Normalizer


旧的Unicode规范化API。

此API已被Normalizer2类取代,仅可用于向后兼容。 这个类只是委托给Normalizer2类。 有两个例外:新API不提供QuickCheckResultcompare()的替代。

normalize将Unicode文本转换为等效的组合或分解形式,从而可以更轻松地排序和搜索文本。 normalize支持Unicode Standard Annex #15 — Unicode Normalization Forms中描述的标准规范化表单。

带有口音或其他装饰的字符可以用几种不同的Unicode编码方式进行编码。 例如,采取字符A-急性。 在Unicode中,这可以编码为单个字符(“合成”形式):

      00C1    LATIN CAPITAL LETTER A WITH ACUTE
 
or as two separate characters (the "decomposed" form):
      0041    LATIN CAPITAL LETTER A
      0301    COMBINING ACUTE ACCENT
 

但是,对于您的程序的用户,这两个序列应该被视为相同的“用户级”字符“A with accent accent”。 在搜索或比较文本时,必须确保这两个序列的处理方式相同。 另外,您必须处理多个口音的字符。 有时候,一个字符的合成口音的顺序是有意义的,而在其他情况下,不同顺序的口音顺序是非常相同的。

类似地,字符串“ffi”可以被编码为三个单独的字母:

      0066    LATIN SMALL LETTER F
      0066    LATIN SMALL LETTER F
      0069    LATIN SMALL LETTER I
 
or as the single character
      FB03    LATIN SMALL LIGATURE FFI
 

ffi连字符不是一个明显的语义字符,严格来说,它不应该是Unicode,但它包含在与现有字符集已经提供的兼容性中。 Unicode标准通过将“兼容性”分解赋予相应的语义字符来识别这些字符。 在排序和搜索时,您经常会想要使用这些映射。

normalize通过将文本转换为上面第一个示例中所示的规范组合和分解形式normalize帮助解决这些问题。 另外,您可以让它执行兼容性分解,以便可以将兼容性字符视为与其等效项相同。 最后, normalize口音重新排列为正确的规范顺序,以便您不必担心自己的重音重排。

Form FCD,“Fast C or D”,也用于整理。 它允许使用在“规范封闭”下工作的算法(如归类)中未必标准化的字符串,也就是说,它将预分解字符及其分解的等价物视为相同。

这不是一种规范化形式,因为它不提供表示的唯一性。 多个字符串可能是正常等价的(它们的NFD是相同的),并且可能全都符合FCD,而本身不相同。

表单被定义为使得“原始分解”(即每个字符的递归规范分解)产生了规范排序的字符串。 这意味着只要分解后的字符不需要规范的重新排序,就可以使用预先构成的字符。

它对整理过程的优势在于,所有NFD和大多数NFC文本(以及许多非标准化文本)已经符合FCD,并且不需要针对此过程进行归一化(NFD)。 在实践中,FCD快速检查对大多数琴弦都会返回YES。

规范化(FCD)可以用NFD来实现。

有关FCD的更多详细信息,请参阅Unicode技术说明#5(应用程序中的规范等效):http://www.unicode.org/notes/tn5/#FCD

如果针对整理器对象启用了标准化,则ICU归类会自动执行NFD或FCD归一化。 除了排序和字符串搜索之外,规范化的字符串可能对字符串等同性比较,音译/转录,唯一表示等有用。

W3C通常建议在NFC中交换文本。 还要注意,大多数遗留字符编码仅使用预先组合的表格,并且通常不会自己编码任何组合标记。 为了转换为这种字符编码,需要将Unicode文本标准化为NFC。 有关更多用法示例,请参阅Unicode标准附录。

注意:Normalizer类还提供了用于迭代规范化的API。 虽然setIndex()和getIndex()引用了底层Unicode输入文本中的索引,但next()和previous()方法遍历规范化输出中的字符。 这意味着next()和previous()返回的字符与传递给setIndex()和getIndex()的索引之间不一定是一一对应的。 正是因为这个原因,Normalizer没有实现CharacterIterator接口。

Summary

Nested classes

class Normalizer.QuickCheckResult

quickCheck()的结果值。

Constants

int COMPARE_CODE_POINT_ORDER

用于比较的选项位:以代码点顺序比较字符串,而不是代码单元顺序。

int COMPARE_IGNORE_CASE

用于比较的选项位:执行不区分大小写的比较。

int FOLD_CASE_DEFAULT

用于比较的选项位:区分大小写比较字符串

int FOLD_CASE_EXCLUDE_SPECIAL_I

案例折叠的选项值:使用CaseFolding.txt中提供的修改的映射集来处理适用于突厥语(tr,az)的点I和无点I。

int INPUT_IS_FCD

用于比较的选项位:假定两个输入字符串都满足FCD条件。

Fields

public static final Normalizer.QuickCheckResult MAYBE

表示无法进一步彻底检查字符串是否处于标准化格式。

public static final Normalizer.QuickCheckResult NO

表示该字符串不是标准化格式

public static final Normalizer.QuickCheckResult YES

表示该字符串处于规范化格式

Public methods

static int compare(char[] s1, char[] s2, int options)

比较两个字符串的规范等价。

static int compare(char[] s1, int s1Start, int s1Limit, char[] s2, int s2Start, int s2Limit, int options)

比较两个字符串的规范等价。

static int compare(int char32a, int char32b, int options)

通过不分配缓冲区可以更快实现的便捷方法。

static int compare(String s1, String s2, int options)

比较两个字符串的规范等价。

static int compare(int char32a, String str2, int options)

通过不分配缓冲区可以更快实现的便捷方法。

Inherited methods

From class java.lang.Object

Constants

COMPARE_CODE_POINT_ORDER

Added in API level 24
int COMPARE_CODE_POINT_ORDER

用于比较的选项位:以代码点顺序比较字符串,而不是代码单元顺序。

常量值:32768(0x00008000)

COMPARE_IGNORE_CASE

Added in API level 24
int COMPARE_IGNORE_CASE

用于比较的选项位:执行不区分大小写的比较。

常量值:65536(0x00010000)

FOLD_CASE_DEFAULT

Added in API level 24
int FOLD_CASE_DEFAULT

用于比较的选项位:区分大小写比较字符串

常量值:0(0x00000000)

FOLD_CASE_EXCLUDE_SPECIAL_I

Added in API level 24
int FOLD_CASE_EXCLUDE_SPECIAL_I

案例折叠的选项值:使用CaseFolding.txt中提供的修改的映射集来处理适用于突厥语(tr,az)的点I和无点I。

也可以看看:

常数值:1(0x00000001)

INPUT_IS_FCD

Added in API level 24
int INPUT_IS_FCD

用于比较的选项位:假定两个输入字符串都满足FCD条件。

常量值:131072(0x00020000)

Fields

MAYBE

Added in API level 24
Normalizer.QuickCheckResult MAYBE

表示无法进一步彻底检查字符串是否处于标准化格式。

NO

Added in API level 24
Normalizer.QuickCheckResult NO

表示该字符串不是标准化格式

YES

Added in API level 24
Normalizer.QuickCheckResult YES

表示该字符串处于规范化格式

Public methods

compare

Added in API level 24
int compare (char[] s1, 
                char[] s2, 
                int options)

比较两个字符串的规范等价。 其他选项包括不区分大小写的比较和代码点顺序(与代码单元顺序相反)。 便利的方法。

Parameters
s1 char: First source string.
s2 char: Second source string.
options int: A bit set of options: - FOLD_CASE_DEFAULT or 0 is used for default options: Case-sensitive comparison in code unit order, and the input strings are quick-checked for FCD. - INPUT_IS_FCD Set if the caller knows that both s1 and s2 fulfill the FCD conditions. If not set, the function will quickCheck for FCD and normalize if necessary. - COMPARE_CODE_POINT_ORDER Set to choose code point order instead of code unit order - COMPARE_IGNORE_CASE Set to compare strings case-insensitively using case folding, instead of case-sensitively. If set, then the following case folding options are used.
Returns
int <0 or 0 or >0 as usual for string comparisons

也可以看看:

compare

Added in API level 24
int compare (char[] s1, 
                int s1Start, 
                int s1Limit, 
                char[] s2, 
                int s2Start, 
                int s2Limit, 
                int options)

比较两个字符串的规范等价。 其他选项包括不区分大小写的比较和代码点顺序(与代码单元顺序相反)。 两个字符串之间的规范等同性被定义为它们的规范化形式(NFD或NFC)是相同的。 此函数递增比较字符串,而不是对两个字符串进行标准化(和可选的情况折叠),从而显着提高性能。 仅当字符串不符合FCD条件时才需要批量标准化。 只有在这种情况下,并且只有当字符串相对较长时,才会临时分配内存。 对于FCD字符串和短的非FCD字符串,不存在内存分配。 在语义上,这相当于strcmp [CodePointOrder](foldCase(NFD(s1)),foldCase(NFD(s2))),其中代码点顺序和foldCase都是可选的。

Parameters
s1 char: First source character array.
s1Start int: start index of source
s1Limit int: limit of the source
s2 char: Second source character array.
s2Start int: start index of the source
s2Limit int: limit of the source
options int: A bit set of options: - FOLD_CASE_DEFAULT or 0 is used for default options: Case-sensitive comparison in code unit order, and the input strings are quick-checked for FCD. - INPUT_IS_FCD Set if the caller knows that both s1 and s2 fulfill the FCD conditions.If not set, the function will quickCheck for FCD and normalize if necessary. - COMPARE_CODE_POINT_ORDER Set to choose code point order instead of code unit order - COMPARE_IGNORE_CASE Set to compare strings case-insensitively using case folding, instead of case-sensitively. If set, then the following case folding options are used.
Returns
int <0 or 0 or >0 as usual for string comparisons

也可以看看:

compare

Added in API level 24
int compare (int char32a, 
                int char32b, 
                int options)

通过不分配缓冲区可以更快实现的便捷方法。

Parameters
char32a int: the first code point to be checked against the
char32b int: the second code point
options int: A bit set of options
Returns
int

compare

Added in API level 24
int compare (String s1, 
                String s2, 
                int options)

比较两个字符串的规范等价。 其他选项包括不区分大小写的比较和代码点顺序(与代码单元顺序相反)。 两个字符串之间的规范等同性被定义为它们的规范化形式(NFD或NFC)是相同的。 此函数递增比较字符串,而不是对两个字符串进行标准化(和可选的情况折叠),从而显着提高性能。 仅当字符串不符合FCD条件时才需要批量标准化。 只有在这种情况下,并且只有当字符串相对较长时,才会临时分配内存。 对于FCD字符串和短的非FCD字符串,不存在内存分配。 在语义上,这相当于strcmp [CodePointOrder](foldCase(NFD(s1)),foldCase(NFD(s2))),其中代码点顺序和foldCase都是可选的。

Parameters
s1 String: First source string.
s2 String: Second source string.
options int: A bit set of options: - FOLD_CASE_DEFAULT or 0 is used for default options: Case-sensitive comparison in code unit order, and the input strings are quick-checked for FCD. - INPUT_IS_FCD Set if the caller knows that both s1 and s2 fulfill the FCD conditions. If not set, the function will quickCheck for FCD and normalize if necessary. - COMPARE_CODE_POINT_ORDER Set to choose code point order instead of code unit order - COMPARE_IGNORE_CASE Set to compare strings case-insensitively using case folding, instead of case-sensitively. If set, then the following case folding options are used.
Returns
int <0 or 0 or >0 as usual for string comparisons

也可以看看:

compare

Added in API level 24
int compare (int char32a, 
                String str2, 
                int options)

通过不分配缓冲区可以更快实现的便捷方法。

Parameters
char32a int: the first code point to be checked against
str2 String: the second string
options int: A bit set of options
Returns
int

Hooray!