java.lang.Object
java.text.Normalizer
该类提供了方法
normalize
,该方法将Unicode文本转换为等效的组合或分解形式,以便更容易对文本进行排序和搜索。 normalize
方法支持 Unicode标准附录#15 — Unicode规范化形式中描述的标准规范化形式。
带有重音或其他装饰的字符可以以多种不同的方式在Unicode中编码。 例如,以字符A-acute为例。 在Unicode中,这可以编码为单个字符(“组合”形式):
U+00C1 拉丁大写字母A带有重音或作为两个单独的字符(“分解”形式):
U+0041 拉丁大写字母A U+0301 组合重音符但对于您程序的用户来说,这两个序列都应被视为相同的“用户级”字符“A带有重音”。 在搜索或比较文本时,您必须确保这两个序列被视为等效。 此外,您必须处理具有多个重音的字符。 有时,字符的组合重音的顺序很重要,而在其他情况下,不同顺序的重音序列实际上是等效的。
类似地,“ffi”字符串可以编码为三个单独的字母:
U+0066 拉丁小写字母F U+0066 拉丁小写字母F U+0069 拉丁小写字母I或作为单个字符
U+FB03 拉丁小写字母连字FFIffi连字不是一个独立的语义字符,严格来说,它根本不应该出现在Unicode中,但为了与已经提供它的现有字符集兼容,它被包含在内。 Unicode标准通过为这些字符提供“兼容性”分解成相应的语义字符来识别这样的字符。 在排序和搜索时,您通常会希望使用这些映射。
normalize
方法通过将文本转换为第一个示例中显示的规范组合和分解形式来解决这些问题。 此外,您可以让它执行兼容性分解,以便您可以将兼容性字符视为它们的等效字符。 最后,normalize
方法将重音重新排列为正确的规范顺序,这样您就不必担心自己重新排列重音。
W3C通常建议在NFC中交换文本。 还要注意,大多数传统字符编码仅使用预组合形式,并且通常不单独编码任何组合标记。 要转换为这种字符编码,Unicode文本需要规范化为NFC。 有关更多用法示例,请参阅Unicode标准附录。
- 自版本:
- 1.6
- 外部规范
-
Nested Class Summary
Modifier and TypeClassDescriptionstatic enum
该枚举提供了四种Unicode规范化形式的常量,这些常量在 Unicode标准附录#15 — Unicode规范化形式中描述,并提供了两种访问它们的方法。 -
Method Summary
Modifier and TypeMethodDescriptionstatic boolean
isNormalized
(CharSequence src, Normalizer.Form form) 确定给定的char值序列是否已规范化。static String
normalize
(CharSequence src, Normalizer.Form form) 规范化char值序列。
-
Method Details
-
normalize
规范化char值序列。 该序列将根据指定的规范化形式进行规范化。- 参数:
-
src
- 要规范化的char值序列。 -
form
- 规范化形式之一;Normalizer.Form.NFC
、Normalizer.Form.NFD
、Normalizer.Form.NFKC
、Normalizer.Form.NFKD
之一 - 返回:
- 规范化后的字符串
- 抛出:
-
NullPointerException
- 如果src
或form
为null。
-
isNormalized
确定给定的char值序列是否已规范化。- 参数:
-
src
- 要检查的char值序列。 -
form
- 规范化形式之一;Normalizer.Form.NFC
、Normalizer.Form.NFD
、Normalizer.Form.NFKC
、Normalizer.Form.NFKD
之一 - 返回:
- 如果char值序列已规范化,则为true;否则为false。
- 抛出:
-
NullPointerException
- 如果src
或form
为null。
-