Ich benutze Java 1.5 und ich muss einen String (wie dieser àìò ---> aeiou) normalisieren. Ich kann Normalizer nicht verwenden, weil> 1,6 Irgendwelche Ideen?Wie akzentuierte Zeichen in Java
Ich habe versucht, dies:
public String normalizeText(String text) {
text = normalizer(text);
text = text.replaceAll("\\p{InCombiningDiacriticalMarks}]", "");
return text;
}
public static String normalizer(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;
}
ich es nicht getestet haben, aber vielleicht [diese Antwort] (http://stackoverflow.com/a/10831704/1682559) funktionieren könnte. Es besagt, dass es für Pre-Java 6 funktionieren sollte. Sie müssen jedoch den Bereich der Zeichen, die Sie konvertieren möchten, und ihre Reihenfolge wissen, wie in der Antwort erläutert. –
Was für ein schreckliches Stück Code ... wo hast du das her? Es benutzt völlig unnötigerweise die Reflexion, was das Programm um eine Größenordnung komplizierter und ineffizienter als notwendig macht. Und es ist nicht magisch, dass die Java 6-Klasse 'java.text.Normalizer' auf Java 5 funktioniert. – Jesper