java.text

接口
异常
java.lang.Object
  继承者 java.text.Normalizer

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

然而,对程序的用户而言,这两个序列都可以被视为同样的“用户级”字符“带有 acute 重音的 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 中,这里包含它是为了与已经提供它的现有字符集兼容。通过“相容 (compatibility)”分解,Unicode 标准将这类字符标识为相应的语义字符。进行分类和搜索时,您会经常希望使用这些映射。

normalize 方法通过将文本转换为规范的组合和分解形式来帮助解决这些问题,正如上面第一个例子所示。另外,您可以使它执行相容分解,以便可以将兼容性字符视为与其等价物一样。最后,normalize 方法将重音重新排列为适当的规范顺序,因此不必考虑重音的重新排列问题。

W3C 通常建议在 NFC 中交换文本。还要注意,大多数遗留字符编码仅使用预组合形式,并且其本身并不对任何合成标记进行编码。对于到此类字符编码的转换,Unicode 文本需要标准化为 NFC。有关更多使用实例,请参见 Unicode Standard Annex。

从以下版本开始:
1.6

嵌套类摘要
static class Normalizer.Form
          此枚举提供在 Unicode Standard Annex #15 — Unicode Normalization Forms 中描述的四个 Unicode 标准化形式的常量,以及访问这些常量的两个方法。
 
方法摘要
static boolean isNormalized(CharSequence src, Normalizer.Form form)
          确定给定的 char 值序列是否被标准化。
static String normalize(CharSequence src, Normalizer.Form form)
          标准化 char 值序列。
 
从类 java.lang.Object 继承的方法
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

方法详细信息

normalize

public static String normalize(CharSequence src,
                               Normalizer.Form form)
标准化 char 值序列。将根据指定标准化形式对序列进行标准化。

参数:
src - 要标准化的 char 值序列。
form - 标准化形式; Normalizer.Form.NFCNormalizer.Form.NFDNormalizer.Form.NFKCNormalizer.Form.NFKD 之一
返回:
已标准化的 String
抛出:
NullPointerException - 如果 srcform 为 null。

isNormalized

public static boolean isNormalized(CharSequence src,
                                   Normalizer.Form form)
确定给定的 char 值序列是否被标准化。

参数:
src - 要检查的 char 值序列。
form - 标准化形式; Normalizer.Form.NFCNormalizer.Form.NFDNormalizer.Form.NFKCNormalizer.Form.NFKD 之一
返回:
如果 char 值序列已被标准化,则返回 true;否则返回 false 。
抛出:
NullPointerException - 如果 srcform 为 null。