文档

Java™ 教程
隐藏目录
文本规范化
路径:国际化
课程:处理文本

文本规范化

规范化是一种处理文本的过程,可以通过某些转换使其在某些情况下变得可调和。假设你想要搜索或排序文本,在这种情况下,你需要规范化文本,以考虑应该表示为相同文本的代码点。

什么可以规范化?规范化适用于需要转换带有变音符号的字符、更改所有字母的大小写、分解连字或将半角片假名字符转换为全角字符等情况。

根据Unicode标准附录15,规范化器的API支持以下四种Unicode文本规范化形式,这些形式在java.text.Normalizer.Form中定义:

让我们看一下拉丁小写字母"o"带分音符的规范化可以如何使用这些规范化形式:

原始单词 NFC NFD NFKC NFKD
"schön" "schön" "scho\u0308n" "schön" "scho\u0308n"

你可以注意到,在NFC和NFKC中,原始单词保持不变。这是因为NFD和NFKD将复合字符映射为其规范分解形式。但是在NFC和NFKC中,如果可能的话,组合字符序列将映射为复合字符。对于分音符没有复合字符,因此在NFC和NFKC中保持分解状态。

在后面代表的代码示例NormSample.java中,你还可以注意到另一个规范化特性。半角片假名字符和全角片假名字符具有相同的兼容分解,因此它们是兼容等价的。但它们不是规范等价的。

要确保你确实需要规范化文本,可以使用isNormalized方法来确定给定的字符序列是否已经规范化。如果此方法返回false,表示你需要规范化此序列,并且应该使用normalize方法根据指定的规范化形式规范化char值。例如,要将文本转换为规范分解形式,你将需要使用以下normalize方法:

normalized_string = Normalizer.normalize(target_chars, Normalizer.Form.NFD);

此外,normalize方法会将重音符号重新排列为正确的规范顺序,因此您不必担心自己的重音符号重新排列。

以下示例表示一个应用程序,使您能够选择标准化形式和标准化模板:


注意:  如果您看不到该小程序运行,请安装至少Java SE Development Kit (JDK) 7版本。下载链接

此小程序的完整代码在NormSample.java中。


上一页:字符和字节流
下一页:使用JTextComponent类处理双向文本