我有3个功能可以删除变音符号,我会在我的Android应用中使用其中一个。
第一个缺点是不能使用Android 2.2及以下版本。
第二个似乎很好,但我不知道在各种设备中使用它会有多安全。
我写的第三个,因为我必须处理的仅变音标记是数组中的那些。
我将此函数用于不超过10个字节的小型搜索字符串。搜索是我的应用程序的主要功能,所以我需要一个可靠的解决方案。第二个选项是否真的适用于所有设备?
FIRST:
public static String removeDiacriticalMarks(String string) {
return Normalizer.normalize(string, Form.NFD)
.replaceAll("\\p{InCombiningDiacriticalMarks}+", "");
}
第二
private static Map<Character, Character> MAP_NORM;
static {
MAP_NORM = new HashMap<Character, Character>();
MAP_NORM.put('á', 'a');
MAP_NORM.put('à', 'a');
MAP_NORM.put('ã', 'a');
MAP_NORM.put('â', 'a');
MAP_NORM.put('é', 'e');
MAP_NORM.put('ê', 'e');
MAP_NORM.put('í', 'i');
MAP_NORM.put('ó', 'o');
MAP_NORM.put('ô', 'o');
MAP_NORM.put('õ', 'o');
MAP_NORM.put('ú', 'u');
MAP_NORM.put('ü', 'u');
MAP_NORM.put('ç', 'c');
}
public static String removeAccents(String s) {
if (s == null) {
return null;
}
StringBuilder sb = new StringBuilder(s);
for(int i = 0; i < s.length(); i++) {
Character c = MAP_NORM.get(sb.charAt(i));
if(c != null) {
sb.setCharAt(i, c.charValue());
}
}
return sb.toString();
}
THIRD:
static Character charswap[] = {'á','a','à','a','ã','a','â','a','é','e','ê','e', 'í','i','ó','o','ô','o','õ','o','ú','u','ü','u','ç','c'};
public static String removeSWAP(String s) {
if (s == null) {
return null;
}
StringBuilder sb = new StringBuilder(s);
for (int i = 0; i < s.length(); i++) {
for (int k = 0; k < charswap.length; k+=2) {
if (s.charAt(i) == charswap[k]) {
sb.setCharAt(i, charswap[k+1]);
}
}
}
return sb.toString();
}
答案 0 :(得分:0)
第二个对我来说似乎完全可靠。它似乎比第三个更易于维护(因为它对于正在发生的事情并不那么神秘)。它也可能更快。