Java 1.5 kullanıyorum aksanlı karakterleri dönüştürmek ve ben (bu aeiou ---> aeiou gibi) String normalleştirmek gerekiyor. Normalizer kullanamıyorum çünkü> 1.6 Herhangi bir fikir var mı?Nasıl Java
Bu denedim: Eğer Normaliser
kullanamazsınız
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;
}
bunu test etmedim ama belki [Bu cevap] (http://stackoverflow.com/a/10831704/1682559) işe yarayabilir. Java 6 için çalışması gerektiğini belirtiyor. Cevabında açıklandığı gibi, dönüştürmek istediğiniz karakterlerin aralığını ve sıralarını bilmeniz gerekiyor. –
Ne korkunç bir kod parçası ... nereden aldın? Tamamen gereksiz yere yansıtma kullanır, bu da programın gerekenden daha karmaşık ve verimsiz bir düzene sahip olmasını sağlar. Ve Java 6 sınıfı 'java.text.Normalizer'ın Java 5 üzerinde çalışmasını sihirli bir şekilde yapmayacaktır. – Jesper