public final class Normalizer extends Object
normalize
,它将Unicode文本转换为等效的组合或分解形式,从而更容易对文本进行排序和搜索。
normalize
方法支持Unicode Standard Annex #15 — Unicode Normalization Forms中描述的标准规范化形式。
具有重音或其他装饰的字符可以以多种不同的方式以Unicode编码。 例如,以字母A-acute。 在Unicode中,可以将其编码为单个字符(“组合”形式):
U+00C1 LATIN CAPITAL LETTER A WITH ACUTE
或作为两个单独的字符(“分解”形式):
U+0041 LATIN CAPITAL LETTER A
U+0301 COMBINING ACUTE ACCENT
然而,对于您的程序的用户,这两个序列应被视为相同的“用户级”字符“A与尖锐的口音”。
当您搜索或比较文本时,您必须确保这两个序列被视为等同的。
另外,您必须处理多个口音的字符。
有时,字符组合口音的顺序是重要的,而在其他情况下,不同顺序的重音序列确实是相当的。
类似地,字符串“ffi”可以被编码为三个单独的字母:
U+0066 LATIN SMALL LETTER F
U+0066 LATIN SMALL LETTER F
U+0069 LATIN SMALL LETTER I
或作为单个字符
U+FB03 LATIN SMALL LIGATURE FFI
ffi连字不是一个独特的语义字符,严格来说,它不应该在Unicode中,而是包含在与已经提供的字符集的兼容性上。
Unicode标准通过将“兼容性”分解给相应的语义字符来标识这些字符。
排序和搜索时,您通常会使用这些映射。
normalize
方法有助于通过将文本转换为规范组合和分解形式来解决这些问题,如上面的第一个例子所示。 此外,您可以使其执行兼容性分解,以便可以将兼容性字符与其等同物相同。 最后, normalize
方法将口音重新排列成正确的规范,让您不用担心自己的口音重排。
W3C通常建议在NFC中交换文本。 还要注意,大多数遗留字符编码仅使用预先形式的形式,并且通常不会自己对任何组合标记进行编码。 要转换为这样的字符编码,Unicode文本需要归一化到NFC。 有关更多使用示例,请参阅Unicode标准附件。
Modifier and Type | Class and Description |
---|---|
static class |
Normalizer.Form
该枚举提供的是,在所描述的四种Unicode范式常数
Unicode Standard Annex #15 — Unicode Normalization Forms种两个方法来访问它们。
|
Modifier and Type | Method and Description |
---|---|
static boolean |
isNormalized(CharSequence src, Normalizer.Form form)
确定给定的char值序列是否被归一化。
|
static String |
normalize(CharSequence src, Normalizer.Form form)
归一化一个char值序列。
|
public static String normalize(CharSequence src, Normalizer.Form form)
src
- 要归一化的char值的序列。
form
- 规范化形式;
一个Normalizer.Form.NFC
, Normalizer.Form.NFD
, Normalizer.Form.NFKC
, Normalizer.Form.NFKD
NullPointerException
- 如果
src
或
form
为空。
public static boolean isNormalized(CharSequence src, Normalizer.Form form)
src
- 要检查的char值的序列。
form
- 规范化形式;
一个Normalizer.Form.NFC
, Normalizer.Form.NFD
, Normalizer.Form.NFKC
, Normalizer.Form.NFKD
NullPointerException
- 如果
src
或
form
为空。