这个规范化function如何工作?

我正在做一个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; } } 

这个function如何运作? 它到底在做什么?

它的作用如下:

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

除了所有操作都通过Reflection执行。

它使用reflection来调用

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

据推测,允许它在1.6之前的Java版本上运行,而这些版本没有这个类。

此函数提供有关Unicode字符串规范化的服务。 在Unicode中,您可以通过多种方式表示相同的事物。 例如,您有一个带重音的角色。 您可以使用单个Unicode字符表示已连接,或已分解(原始字母,不带重音符号,然后是修饰符 – 重音符号)。

该类来自Java 6.对于Java 5,有一个SUN专有类。

请参阅Phramer项目中的类info.olteanu.utils.TextNormalizer ( http://sourceforge.net/projects/phramer/,www.phramer.org ),了解在Java 5(SUN JDK)和Java中获取规范化器的方法6,没有任何编译问题(代码将在任何版本> = 5中编译,代码将在两个JVM中运行,尽管SUN放弃了Java 5专有类)。