[英]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.