繁体   English   中英

此规范化功能如何工作?

[英]How does this normalize function work?

我正在做一个Junit教程,遇到了正在测试的标准化函数。 定义如下:

 public static String normalizeWord(String word) {
        try {
            int i;
            Class<?> normalizerClass = Class.forName("java.text.Normalizer");
            Class<?> normalizerFormClass = null;
            Class<?>[] nestedClasses = normalizerClass.getDeclaredClasses();
            for (i = 0; i < nestedClasses.length; i++) {
                Class<?> nestedClass = nestedClasses[i];
                if (nestedClass.getName().equals("java.text.Normalizer$Form")) {
                    normalizerFormClass = nestedClass;
                }
            }
            assert normalizerFormClass.isEnum();
            Method methodNormalize = normalizerClass.getDeclaredMethod(
                                                            "normalize",
                                                            CharSequence.class,
                                                            normalizerFormClass);
            Object nfcNormalization = null;
            Object[] constants = normalizerFormClass.getEnumConstants();
            for (i = 0; i < constants.length; i++) {
                Object constant = constants[i];
                if (constant.toString().equals("NFC")) {
                    nfcNormalization = constant;
                }
            }
            return (String) methodNormalize.invoke(null, word, nfcNormalization);
        } catch (Exception ex) {
            return null;
        }
    }

此功能如何工作? 它实际上在做什么?

它与以下功能相同:

import java.text.Normalizer;

try {
    return Normalizer.normalize(word, Normalizer.Form.NFC);
} catch (Exception ex) {
    return null;
}

除了所有操作都是通过反射执行的。

它使用反射来调用

java.text.Normalizer.normalize(word, java.text.Normalizer.Form.NFC);

大概是为了允许它在没有此类的Java 1.6之前的版本上运行。

此功能提供有关Unicode字符串标准化的服务。 在Unicode中,您可以通过多种方式表示同一件事。 例如,您有一个带有重音符号的字符。 您可以使用一个Unicode字符表示它是联接的,还是分解的(原始字母(不带重音),然后是修饰符-重音)。

该类来自Java6。对于Java 5,有SUN专有类。

见类info.olteanu.utils.TextNormalizer在Phramer项目( http://sourceforge.net/projects/phramer/一种方式来获得Java 5中(SUN JDK)归一化器两种,www.phramer.org),并在Java中6,没有任何编译问题(尽管SUN放弃了Java 5专有类,但代码将在任何版本== 5的情况下进行编译,并且代码将在两个JVM中运行)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM